[Define / MACRO] Est-ce possible de faire cela ? [Résolu]

Signaler
Messages postés
79
Date d'inscription
lundi 23 décembre 2002
Statut
Membre
Dernière intervention
1 mars 2011
-
Messages postés
79
Date d'inscription
lundi 23 décembre 2002
Statut
Membre
Dernière intervention
1 mars 2011
-
Bonjour a tous,

Mon problème est le suivant : je souhaiterais savoir s'il était possible de remplacer la ligne suivante :

IObject *myobj; //IObject est une interface

int poids = dynamic_cast(myobj);


j'ai créer une macro : #define MAGICAST(var, type) dynamic_cast<type>(var)

et je l'appelle comme ceci : std::cout <<MAGICAST(obj, Int32*)->getWeight() <<std::endl;

je voudrais savoir si il est possible de faire le même type de macro pour :
MAGICAST(obj, "Int32*")->getWeight() ou Int32* passer en paramètre serait en chaine de char...

____________________
Ma Quête n'est pas Terminée

2 réponses

Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
1) Préfère un template plutôt qu'une macro (les deux sont évalué à la compilation, mais les templates font des vérifications de type)

template<typename Out, typename In>
inline Out magic_cast(In obj)
{
  return dynamic_cast<Out>(obj);
}

int poids = magic_cast(myobj);


2) Es-tu sur de vouloir faire un dynamic_cast ? Tu peux aussi réaliser un static_cast si tu es sur de la conversion.

3) Je ne comprends pas l'intérêt de ce que tu recherches à faire ? Pourquoi veux-tu marquer "Int32*" plutôt que Int32* ? (Néanmoins, je ne pense pas que ce soit possible).
Messages postés
79
Date d'inscription
lundi 23 décembre 2002
Statut
Membre
Dernière intervention
1 mars 2011

merci, jai finalement utiliser les templates !

____________________
Ma Quete n'est pas Terminee