Bonjour,
D'abord desole si mon probleme est un peu tordu ...
Je souhaiterais recuperer le type T d'une variable, sachant que je ne connais que sa classe mere (donc je ne connais pas le "vrai" type de la variable, etant derive de cette classe mere). Cela me servirais pour incrementer un pointeur sur T.
Concretement, je souhaiterais faire ceci:
Pour l'instant, j'arrive a faire cela via cette classe templatee (is_pointer est un trait...), mais en donnant explicitement le type d'arrive (donc sans l'extraire d'une variable comme je souhaiterais):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void example (std::vector<Vertex*> tableau) { void* ptr = ...; inc_pointer<void*, typeof (tableau[42])> (ptr); // ptr pointe maintenant sur la case suivante }
Quelques precisions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 template<typename SrcPtr, typename DstPtr> void Pointer::inc_pointer (SrcPtr& ptr) { if (Pointer::is_pointer<SrcPtr>::result && Pointer::is_pointer<DstPtr>::result) ptr = &(((DstPtr) ptr)[1]); else // erreur } void exemple () { void* ptr; Pointer::inc_pointer<void*, TypeDeDestination*> (ptr); }
- etant sous visual studio 2008, je n'ai pas acces a typeof (dailleurs qui n'est pas portable, non ?)
- Je prefererais ne pas templater la fonction ou j'ai besoin d'incrementer mon pointeur, ca n'aurait pas de sens au niveau du role de la fonction
- Eviter la solution crade du switch (code intrusif)
- Je fais ca dans le cadre d'une fonction de rendu en DirectX9. C'est pour faire des memcpy de chaque vertex ecrit dans mon vertex buffer, donc il n'y a pas de problemes d'allocations ou des possibilites de violation d'acces...
Merci d'avance pour l'aide que vous pourrez apporter !
Altefquatre
Partager