begin process at 2010 02 09 15:28:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Usage des MACRO


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Usage des MACRO

mercredi 12 juillet 2006 à 17:26:01 | Usage des MACRO

wizzo

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
mercredi 12 juillet 2006 à 20:25:30 | Re : Usage des MACRO

steve_clamage

Le fait que le C++ offre des supports permettant de se passer de macros la ou on avait l'habitude de les utiliser en C ne veut pas dire que leurs utilisation est à bannir, une macro reste une macro. C'est juste qu'on sera moins souvent ammener a en utilisé.

Par contre pour ton histoire de RTTI fait maison j'ai pas trop compris comment tu l'implementais, tu peux donner plus de détail ?
jeudi 13 juillet 2006 à 11:57:05 | Re : Usage des MACRO

wizzo

"Mon membre static est LE MEME pour toutes les classes dérivées !"

Après quelques tests, je me suis aperçu que mon postulat etait erroné
en faisant MyClass::s_kType j'avais toujours accès au membre de la classe mère, mais il suffisait d'inserer un getter surchargé dans le process pour etre sur de recuperer le s_kType de la classe courante.

Au final, la macro ke j'utilise ne sert qu'à simplifier l'ecriture du code.

Si tu veux voir ce que ça donne (et me donner ton avis au passage pkoi pas :p),  j'ai uploadé un exemple ici :
http://ece.fr:8000/~miffre/public/dev/RTTI/RTTI.rar

Mais donc on est d'accord, les macro restent tres utiles pour automatiser certains bouts de code répétitifs.
Eric




Cette discussion est classée dans : macro, var, usage, cderivee, cbasertti


Répondre à ce message

Sujets en rapport avec ce message

#define incremental [ par garslouche ] Salut à tous,je cherche à écrire une macro qui utiliserait un parmètre qui augmenterait à chaque utilisation. Par exemple si la macro s'appelle AUTO_I probleme d'adresse [ par Adeon ] voila mon probleme:j'ai cree 2 programmesvoila le premier :int var = 0; for(;;) { gotoxy(0,0); printf("var ( adresse : %p) = %d ",&var,var); /*le prog une structure dans une VARIANT [ par Ayato ] Bonjour J'ai un problème, j'aimerai passer une structure dans une variant, j'ai teste plusieurs solution (inspirer de différentes sources dispo sur l Héritage et constructeur de la classe fille [ par Cookiem ] Bonjour c'est une question vraiment toute bête mais ... j'arrive pas à trouver la solution.Lorsqu'une classe fille hérite d'une classe mère.Comment fa pb de déclarations ? [ par k_otik ] bonjour à tous, j'espère que vous pourrez m'aider.J'ai souvent des problèmes de calculs de nombre, voici un extrait de mon programme.int x, y;char var list iterator et polymorphisme [ par luhtor ] Bonjour, bon j'ai un petit soucis avec les iterator. C'est simple, j'ai une classe var_test et une classe sub_var qui dérive de var_test. Elles redéf Envoyer typedef structure à DLL [ par Zootella ] Hello, Voilà pour faciliter l'envoie de données à une dll, je crée une structure typdef: typedef struct {     std::string var;     std::string var1; [Visual Studio .NET 2003] Macro à plusieurs paramètres. [ par meech ] Bonjour,J'essaie, en vain, de porter un code convenable compilable sous GCC 3.4 vers l'environnement Visual Studio .NET 2003.Un proboème survient lors Macro et tableau [ par vecchio56 ] Bonjour, le code suivant me pose problème: #define INIT(name, val) int name[] = val int main() {   INIT(a, {2, 3}); } warning C4002: trop de paramèt Usage intensif de new et delete ? [ par tintin72 ] Bonjour,J'ai un programme (Windows) qui doit afficher la valeurs des éléments d'une liste chainée mais je ne sais pas quelle est la meilleur solution.


Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales