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