IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Imbrication de macros


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 56
    Par défaut Imbrication de macros
    Bonjour à tous !

    J'aurai une petite question vous vos esprits indue de connaissances, auquel je n'arrive pas a trouvez de réponse.
    Dans un de mes programmes, j'ai un nombre considérable de classes à déclarer qui ont des tas de paramètres en commun. Du coup, je me suis dis que j'allais faire des macros pour me simplifier la vie.

    L'idée de faire quelque chose dans le genre (en version simplifié ici) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    START_CLASS(maclasse)
        ADD_FUNCTION(x)
        ADD_FUNCTION(y)
        ADD_FUNCTION(z)
    END_CLASS
     
    START_CLASS(maclasse2)
        ADD_FUNCTION(u)
        ADD_FUNCTION(v)
        ADD_FUNCTION(t)
    END_CLASS
     
    ect...
    Et donc, pour récuperer la classe courante a chaque macro ADD_FUNCTION, je voulais définir le START_CLASS comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #define START_CLASS(tclass) \
        #if defined(CURRENT_CLASS) \
            #undef CURRENT_CLASS \
        #endif \
        #define CURRENT_CLASS tclass
    Pour pouvoir déclarer les ADD_FUNCTION comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define ADD_FUNCTION(fct) \
        void CURRENT_CLASS::fct(...) { ... }
    Mais j'ai donc un problème sur START_CLASS car visiblement il n'est pas possible de définir des macros imbriqué dans d'autres. Donc, je cherche a savoir si c'est possible quand même (peut-être en protègeant le caractère #, mais j'ai pas trouvé comment).

    Merci beaucoup.
    Snark.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Pas à ma connaissance.

    Pour les interfaces COM sous Windows, on doit faire ça explicitement, comme le montrent les deux premières lignes:
    Code C/C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #undef INTERFACE
    #define INTERFACE IUneInterface
     
    DECLARE_INTERFACE_(IUneInterface, IUnknown)
    {
    	STDMETHOD(QueryInterface)(THIS_ REFIID, void**) PURE;
    	STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    	STDMETHOD_(ULONG, Release)(THIS) PURE;
     
    	STDMETHOD(UneMethode)(THIS) PURE;
    	STDMETHOD(UneAutreMethode)(THIS_ int, int) PURE;
    };
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 56
    Par défaut
    Ha zut, dommage, vraiment dommage.
    Enfin, je vais devoir le faire explicitement à la place, c'est pas la mort ^^.

    Merci beaucoup sinon.

  4. #4
    screetch
    Invité(e)
    Par défaut
    tu as sans doute d'autres moyens, comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #define START_CLASS(tclass) \
      namespace _private_##tclass##_##__LINE__ { \
        typedef tclass current_class;
     
    #define END_CLASS } //closes namespace
     
    #define ADD_FUNCTION(f) registerFunction(&current_class::f);
    tu te sers d'un typedef et tu le mets dans un namespace que tu ne peux pas confondre avec un autre quoi.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Mais bonne chance ensuite pour retrouver le namespace en question si besoin est...

    À ta place, je ne mettrais pas le __LINE__...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    screetch
    Invité(e)
    Par défaut
    tout depend de l'usage, et personne n'est a la place de snark.

Discussions similaires

  1. Imbrication de deux macros
    Par caribou1976 dans le forum Macro
    Réponses: 2
    Dernier message: 24/08/2012, 12h47
  2. Imbrication de macros
    Par Mill5 dans le forum Macro
    Réponses: 1
    Dernier message: 21/05/2012, 17h36
  3. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2002, 12h15
  4. Qu'est-ce qu'une macro ?
    Par karli dans le forum Assembleur
    Réponses: 2
    Dernier message: 01/09/2002, 03h38
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo