arithmétique de pointeurs voids ? ça marche mais g++ m'insulte!
Bonjour!
Après avoir relu les tutoriels du site, je n'ai pas trouvé de réponse. J'espère cependant ne pas poser une question idiote :p.
J'essaye de travailler sur une structure déclarée et définie dans une librairie dynamique (.so) par offset et pointeurs dans le programme "appelant", ce qui m'amène à un warning de g++. Le code est fonctionnel, mais pourriez vous m'indiquer une méthode équivalente qui ne fasse pas crier g++?
Ce que je fais est équivalent à:
la structure (.h):
Code:
1 2 3 4 5 6
|
typedef struct
{
float a;
float b;
}dumbStruct; |
le bout de code (.cpp)
Code:
1 2 3 4 5 6 7 8 9
|
void * ptr;
dumbStruct Struc;
Struc.a = 1;
Struc.b = 2;
ptr = &Struc;
cout << "a :" << *(float*)ptr << "\n";
cout << "b :" << *(float*)(ptr + sizeof(float)) << "\n\n"; |
Sortie:
La sortie est donc bonne, mais j'ai un warning de la forme:
Citation:
attention : pointer of type ‘void *’ used in arithmetic [-Wpointer-arith]
Ok, donc il n'aime pas qu'on fasse de l'arithmétique avec un void *.....
Les casts sont simplement pour provoquer le warning (je pourrais ici juste déclarer le pointeur en float, ou enlever les parenthèses du cast, mais ça ne traduirait pas mon vrai soucis de ne pas connaitre le type du pointeur). En réalité, je dispose uniquement d'un pointeur void sur la structure, et d'un vector de strings contenant le type de toutes les variables (je peut donc gérer les offsets avec sizeof() qui accepte des strings en entrée). Je ne peut pas déclarer ou caster le pointeur dans le bon type pour éviter de travailler sur un void (enfin pas à ma maigre connaissance).
Pourriez-vous me proposer une alternative "propre" s'il vous plait? ( et donc qui ne fait pas pleurer gcc?)
Un grand merci d'avance!