Bonjour,
Quel est l'équivalent d'instance of en java ?
Merci,
Version imprimable
Bonjour,
Quel est l'équivalent d'instance of en java ?
Merci,
Salut,
Tu dois pouvoir t'en sortir avec typeid.
Pourquoi faire ? (je sens la redéfinition de choses comme isEquals à 3km, d'où ma question)
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.
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.
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++ :).Citation:
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:
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:
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...:cry:
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.
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++?)
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 !