Salut a tous.
Je relance la discussion eternelle sur l'usage des macro.
En theorie, elles sont à proscrire car n'ayant aucune idée des scopes/portées des namespace, classes et autres, et ne sont pas typesafe.
Ce qui elimine leur usage pour les constantes, fonctions, etc (remplacé par les const float var = , les fonctions inline et template)
Je suis parfaitement d'accord avec ça.
Mais de temps en temps je vois sur un site qqun qui dit ne jamais utiliser de macro, alors qu'il m'arrive de rencontrer des cas ou je me sens obligé d'en utiliser.
Voila un exemple :
J'ai implementé un système de RTTI. Je veux que pour chaque classe que je déclare avoir un membre static s_kType. MAIS voyons le code suivant :
class cBaseRTTI {
static cRTTI s_kType;
cRTTI GetRTTI();
/*...*/
};
class cDerivee : public cBaseRTTI {
/*...*/
};
Mon membre static est LE MEME pour toutes les classes dérivées !
cad que dans l'ordre:
1 - je créer cBaseRTTI
2 - cBaseRTTI var;
var.GetRTTI() va me dire que ma variable est de type cBaseRTTI
3 - je créer cDerivee
cDerivee var2;
var2.GetRTTI() va me dire que ma variable est de type cDerivee, ce qui est OK
MAIS
cBaseRTTI var;
var.GetRTTI() va me dire que ma variable est de type cDerivee !
Donc j'ai trouvé une solution, en ajoutant le code relatif au RTTI dans une macro, et en faisant un DECLARE_RTTI(cDerivee) et IMPLEMENT_RTTI(cDerivee), qui marche tres bien et qui me statisfait dans l'ensemble, mais j'aimerai bien savoir COMMENT on pourrai faire sans macro.
Voila, dites moi ce que vous pensez,
Eric