Ilsundal
Messages postés79Date d'inscriptionlundi 23 décembre 2002StatutMembreDernière intervention 1 mars 2011
-
25 sept. 2009 à 09:17
Ilsundal
Messages postés79Date d'inscriptionlundi 23 décembre 2002StatutMembreDerniè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...
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 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).