J'utilise des unions de modèles pour m'assurer que je reçois toujours un champ de 64 bits pour les pointeurs (même sur les machines 32 bits car il y a transmission de données vers une machine 64 bits) et pour sauver à la fois l'utilisateur et moi-même casting.définition d'un membre de syndication par défaut
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)
Ceci fonctionne bien pour moi, mais j'aimerais vraiment trouver un moyen de faire un membre par défaut. de sorte que l'utilisateur n'a pas besoin d'utiliser .ptrForm après le pointeur qu'il souhaite utiliser.
Vous ne pouvez pas faire cela (membre de syndicat par défaut), et je ne vois pas comment cela aide. Si vous transmettez une valeur de pointeur entre deux machines, la valeur ne signifiera rien sur l'autre machine même si elles sont de la même architecture, donc il semble que quelque chose ne va pas avec votre stratégie de transmission/stockage de données? –
Je demande à la machine réceptrice l'adresse mémoire où elle va démarrer le bloc de données, avec cette information je peux calculer les pointeurs sur la machine réceptrice. Bien sûr, tout est illisible sur l'expéditeur, mais mon but est de faire plus de travail sur l'expéditeur en raison des processeurs et des environnements très différents sur les deux machines. pour le moment ce problème est seulement un problème de code à la recherche confus pour l'utilisateur, j'ai la fonctionnalité de travail. – Adam