Bonjour,
Quel est l'�quivalent d'instance of en java ?
Merci,
Bonjour,
Quel est l'�quivalent d'instance of en java ?
Merci,
Salut,
Tu dois pouvoir t'en sortir avec typeid.
Ressources propos�es par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Pourquoi faire ? (je sens la red�finition de choses comme isEquals � 3km, d'o� ma question)
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...
Le dynamic_cast<> du C++, utilis� sur un pointeur, sert � la fois de instanceof et de cast qui ne lance pas d'exception en cas d'�chec.
Par contre, utilis� sur une r�f�rence, il agit comme le cast de java, et lance une exception std::bad_cast si le type ne correspond pas.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Merci pour vos r�ponses !
En effet j'ai essay� avec typeid et ca fonctionne.
Pour quoi faire ?
Et bien en fait je fais un traitement avec des �l�ments d'une liste. Ces �l�ments sont cens�s �tre tous d'un m�me type (non primitif) mais on ne sait jamais, je pr�f�re tout de m�me v�rifier ...
J'ai regard� un exemple avec dynamic_cast et c'est similaire non ?
Oublie C, Pascal et Java.
Le typage du C++ est plus pouss� pour ce genre de choses. On utilise les template. D'ailleurs si ce n'est pas pour un exo, utilise std::list<> si tu veux une liste chain�e.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...
Les template en C++ c'est pareil que la g�n�ricit� en java non ?
Et ce ne sont pas des listes que j'ai cr�� mais des listes d�j� existantes, qui sont suppos�es contenir les m�mes �l�ments mais par pr�caution je v�rifie ce qu'elles contiennent, ce qui explique pourquoi je ne peux pas utiliser les templates.
Pour faire simple, la g�n�ricit� en java est un sous ensemble des templates C++Les template en C++ c'est pareil que la g�n�ricit� en java non ?.
Pour ce qui a �t� dit, tu peux effectivement utiliser typeid pour �muler instanceof.
Si tu as des pointeurs, mieux vaut faire un dynamic_cast :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 if(typeif(ma_variable) == typeid(int) ) // ma_variable est un int
Cela dit, je ne comprends pas trop pourquoi tu as besoin de "v�rifier ce que ta liste contient" ? C'est un truc cod� "C-style" avec des void* dans tous les sens ?
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 MaClasse* monPtr = dynamic_cast<MaClasse*>(ma_variable); if(monPtr != NULL) // ma_variable est de type MaClasse*
Ok, merci !
Dans ce cas j'opterai pour le dynamic_cast alors.
J'ai besoin de v�rifier, car ce que retourne ma liste est de type (void *), ce qui fait qu'il est n�cessaire de caster avec mon type. Tous les objets sont cens�s �tre du m�me type mais c'est parce qu'en cours, on me r�p�te de toujours v�rifier les cas d'erreur .
[EDIT]
Ben en fait �a marche pas...
Ca me retourne : "Le type void n'est pas une classe d�finit avec des fonctions virtuelles"
Je suis sous Borland �a y change quelque chose ?
On ne peut pas utiliser dynamic_cast avec void*: Il faut au moins l'utiliser sur une classe, contenant des fonctions virtuelles.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Contrairement aux templates, tu ne pourras jamais rien v�rifier avec des void*...
Tu es oblig� d'utiliser cette solution C? (comprendre: as-tu le droit de mettre aux oubliettes cette approche ant�diluvienne pour faire vraiment du C++?)
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...
O� je suis malheureusement oblig� d'utiliser cette solution (quoique je vais voir quand m�me parce que �a m'emb�te de laisser �a comme �a ... ).
Pour l'instant je vais laisser �a sans v�rifier ce que je r�cup�re, dommage.
Merci pour votre aide !
Partager