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 :

macro qui crée enum et tableau


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur du dimanche
    Inscrit en
    Février 2013
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Février 2013
    Messages : 154
    Par défaut macro qui crée enum et tableau
    Bonjour,

    J'ai trois structures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct Cat { const static unsigned mask = 1; };
    struct Dog { const static unsigned mask = 2; };
    struct Cow { const static unsigned mask = 4; };
    J'aimerais créer une macro qui prendrait des types en argument et qui :
    - en ferait un enum
    - créerait un tableau avec les maks des types

    Rien compris ? X) Un petit exemple sera plus parlant. J'aimerais pouvoir écrire :

    Ceci me créerait une structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct
    {
        enum {Dog,Cow,Cat};
        unsigned tab[3] = {2,4,1};
    } test;
    Pour l'instant j'ai écrit la macro suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #define macro(Ts...)                    \
    struct                                  \
    {                                       \
        enum { Ts,count };                  \
        unsigned tab[count] = {Ts::mask};   \
    } test;
    C'est bon pour l'enum, mais pour tab c'est pas encore ça il doit y avoir un problème d'expanded pack quelque part, mais je ne sais pas comment résoudre ça !

    Des suggestions ?

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Proposition au pif (car n'aimant pas les macros, je ne connais pas ce niveau de détails):
    As-tu essayé Ts...::mask et Ts::mask... et aucun des deux ne marchent?

    Par ailleurs, que génère ta macro actuelle?

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur du dimanche
    Inscrit en
    Février 2013
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Février 2013
    Messages : 154
    Par défaut
    As-tu essayé Ts...::mask et Ts::mask...
    Oui, dans les deux cas le compilateur me dit "Pack expansion does not contain any unexpanded parameter packs"

    Par ailleurs, que génère ta macro actuelle ?
    Eh bien par exemple,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    macro(Dog,Cow,Cat);
    std::cout << test.Dog << std::endl;
    std::cout << test.Cow << std::endl;
    std::cout << test.Cat << std::endl;
    std::cout << test.tab[0] << std::endl;
    std::cout << test.tab[1] << std::endl;
    std::cout << test.tab[2] << std::endl;
    Affiche ceci :

    0
    1
    2
    0
    1
    1

    Les trois premiers correspondent à l'enum, nikel, par contre les trois derniers, c'était pas franchement attendu comme résultat, moi jvoulais 2 4 1

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    C'est le code généré par la macro qui est intéressant.
    Tu peux l'obtenir avec certains réglages de compilation.
    Pour gcc, c'est -E, qui produit le code après le passage du préprocesseur (donc les macros) mais avant compilation.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 488
    Par défaut
    L'équivalent du -E de gcc pour Visual Studio, c'est /P.
    https://msdn.microsoft.com/en-us/lib...or=-2147217396

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    au passage, la macro devrait prendre le nom de la variable générée en argument. ici, "test" semble vraiment sortir du chapeau.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. macro qui crée une macro est ce possible
    Par redstoff dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/02/2011, 11h49
  2. Macro qui crée une macro
    Par ankoubzh dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/05/2009, 19h44
  3. problème : une macro qui crée un tableau
    Par watashi wa dans le forum Mise en forme
    Réponses: 1
    Dernier message: 22/04/2008, 09h22
  4. macro qui crée une macro, est ce possible ?
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/07/2007, 09h43
  5. Macro qui crée et renomme un controle
    Par k-eisti dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/06/2007, 17h17

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