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

Résolu
Ilsundal Messages postés 79 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 1 mars 2011 - 25 sept. 2009 à 09:17
Ilsundal Messages postés 79 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 1 mars 2011 - 25 sept. 2009 à 11:08
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
25 sept. 2009 à 10:20
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).
3
Ilsundal Messages postés 79 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 1 mars 2011
25 sept. 2009 à 11:08
merci, jai finalement utiliser les templates !

____________________
Ma Quete n'est pas Terminee
0
Rejoignez-nous