Typage d'un pointeur "void *" - C++ - Programmation
Marsh Posté le 22-06-2007 à 00:06:47
Ce n'est pas vraiment faisable de manière propre.
Cela dit, c'est assez étonnant que tu doive écrire une telle fonction, si tu as vraiment besoin de ça y'a de grande chance qu'il y ait un problème de conception dans ton programme.
Marsh Posté le 22-06-2007 à 12:35:26
utilise des template ou du polymorphisme ou les deux. il est impossible de déterminer a priori ce qui se cache derrière un void*
Marsh Posté le 22-06-2007 à 16:24:44
Je suis surpris, et comme dis Taz, utilise du polymorphisme ou du template..e une autre solution consisterai à implementer une RTTI aussi je pense... mais cela dépend beaucoup des besoins réels derrière.
Marsh Posté le 22-06-2007 à 16:59:41
quoi 'implémenter une RTTI' ? si ton void* pointe vers n'importe ou, tu ne pourras rien en faire
Marsh Posté le 23-06-2007 à 20:26:39
Messieurs
Suite à vos interventions, quelques questions me viennent à l'esprit :
1) Qu'est-ce qu'une RTTI ? (Je précise : je suis un gros débutant)
2) Pour préciser mon problème, je vous le présente
j'ai créé une classe template Polynome qui dérive d'une classe Object qui possède
une méthode hashCode() (pour faire "comme JAVA" )
Code :
|
Et voici mon problème qui vient avec ses gros sabots : l'implémentation de ma méthode "hashCode"
dépends de la classe C
Voilà !
Donc, si quelqu'un peut résoudre mon problème (solution technique ou nouvelle implémentation, .. etc) je lui
en serais très reconnaissant
Marsh Posté le 23-06-2007 à 20:32:53
Avec une spécialisation de ton template pour les int tu t'en sors facilement.
Marsh Posté le 23-06-2007 à 21:40:02
0x90 a écrit : Avec une spécialisation de ton template pour les int tu t'en sors facilement. |
Merci, c'est exactement ce qu'il fallait
J'ai juste utilisé une spécialisation partielle de la méthode hashCode pour les "int" et pour
la classe Object.
Par contre, je n'ai pas compris (cette question étant pour ma culture générale) à quoi peut servir la spécialisation
totale. Cela me semble bien lourd car il recoder la classe complètement.
En gros, merci
Par contre, si quelqu'un pouvait me donner un exemple de spécialisation totale de template, je lui
en serais reconnaissant
Marsh Posté le 25-06-2007 à 09:49:30
Taz a écrit : quoi 'implémenter une RTTI' ? si ton void* pointe vers n'importe ou, tu ne pourras rien en faire |
désolé et ne plus utilisé de void* mais un MaClassBase*.... Mais je supposait que cela allait de soit, puisqu'il veut tester si son pointeur est de type UnObject (qui dérive de MaClassBase)...
Citation : mais cela dépend beaucoup des besoins réels derrière. |
comme je l'ai dit plus haut.
Taz => s'il te plait lit entièrement les réponses données avant de t'emballer. Ce sera plus constructif pour tout le monde, je pense . Par contre je ne remets pas en cause tes intervention qui me sont au passage toujours très intructives .
Edit: voilà une spécialisation de template est plus approprié dans ce cas...
casper78 => merci d'avoir préciser ta demande.
Cdt,
Marsh Posté le 10-08-2007 à 20:17:43
Hello
Une autre solution pour connaître le type des classes dérivées (c'est pas très jojo mais ça marche). En revanche, c'est bien entendu limité aux classes connues.
De façon générale, le fait de récupérer dynamiquement le type de l'objet n'est ni facile ni conseillé. Le mieux étant de programmer autrement... c'te réponse de normand...
Définition des classes à exploiter (sans les constructeur/destructeur... à implémenter si on veut être propre).
Code :
|
Un ti nexemple
Code :
|
Voilou
Marsh Posté le 10-08-2007 à 22:16:27
c'est assez moche. dynamic_cast c'ets pour les poulaisn ousbeques ?
Marsh Posté le 11-08-2007 à 12:48:11
J'imagine que, bien que crade, ça doit pouvoir être utilisé comme le rtti du pauvre non? Par "pauvre", j'entends les environnements où le rtti standard du C++ est trop coûteux (comme le dev sur DS).
Marsh Posté le 11-08-2007 à 13:47:53
mouais ... mais bon, si tu en ai à programmer sur ce genre de plate-forme (j'ai fait de al GBA à un moment), t'evites completement l'e shierarchies d'objet complexes comme ça.
Marsh Posté le 11-08-2007 à 13:59:06
Oula, personnellement je ne m'y suis pas encore attaqué
C'est un pote qui en fait, et il me disait juste qu'ils font des cast C au lieu des casts C++; sur le coup je suis parti du principe que tu as énoncé, mais je me demande si c'est renforcé par ce genre de tests. Je lui poserais la question tiens...
Marsh Posté le 21-06-2007 à 23:16:19
Bonjour tout le monde
Je vous soumets un problème qui doit être classique mais dont je n'arrive pas à trouver la
solution :
Voilà , j'ai créé une classe Object et une fonction statique
dont le but est de permettre de savoir si un pointeur (dont on ne connait pas le type) pointe sur une instance
de classe Object.
Le problème est que je ne sais pas comment faire car la fonction dynamic_cast ne marche pas
sur les pointeurs du type "void *"
Donc , si quelqu'un a la réponse, je lui en serai reconnaissant
PS : Je me rends tout à fait compte que ce problème est classique.
Donc, pardonnez le débutant que je suis