Я использую шаблонные объединения, чтобы оба убедиться, что я всегда получаю 64-битное поле для указателей (даже на 32-битных машинах, поскольку происходит передача данных на 64-битную машину) и сохранить как пользователя, так и меня.установка члена объединения по умолчанию
template <typename type> union lrbPointer
{
uint64_t intForm;
type ptrForm; //assumed that type is a pointer type
};
//usage
lrbPointer<int*> myPointer;
int integers[4];
myPointer.ptrForm = integers;
myPointer.intForm += 2; //making it easy to jump by less then sizeof(int)
Это хорошо работает для меня, но мне очень хотелось бы найти способ сделать член по умолчанию. так что пользователю не нужно использовать .ptrForm после указателя, который они хотят использовать.
Вы не можете сделать это (член объединения по умолчанию), и я не вижу, как это помогает. Если вы передаете значение указателя между двумя машинами, это значение не будет означать ничего на другом компьютере, даже если это одна и та же архитектура, поэтому кажется, что что-то не так с вашей стратегией передачи/хранения данных? –
Я прошу приемную машину для адреса памяти, где он запустит блок данных, с этой информацией я могу вычислить указатели на принимающем компьютере. он, конечно, делает все нечитаемым на отправляющей машине, но моя цель - сделать больше работы на отправляющей машине из-за очень разных процессоров и сред на обеих машинах. В настоящий момент эта проблема является лишь проблемой запутывания выглядящего кода для пользователя, у меня есть функциональность. – Adam