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 : Nommer une fonction


Sujet :

C++

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut Macro : Nommer une fonction
    Bonjour à tous,

    J'aimerai produire une Macro, qui prend en paramètre une partie du nom de la fonction qu'elle doit générer.

    Par exemple, pour générer les fonctions :
    createXContainer
    createYContainer

    J'aimerai une macro style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #define CREATE_CONTAINER(Name) \
       void createNameContainer;
    J'ai essayé avec
    void create(Name)Container;
    void create(##Name)Container;
    void create(#Name)Container;

    Mais pas moyen que ça compile.. il doit bien y avoir moyen de faire ça, non ?

    Pour le moment je travaille avec VS2010, on verra plus tard ce genre de truc exotique avec les autres compilateurs..

    Merci à vous

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #define CREATE_CONTAINER(Name) \
                   void create ## Name ## Container();
    En passant, n'utilise le préprocesseur si tu en as réellement besoin (genre faire une interface C). Si c'est pour de la méta-programmation, tu devrais pouvoir utiliser (a priori de manière plus sure) les templates.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Merci

    Je vais quand même tenter avec des template..
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    je ne vois pas comment tu peux réaliser cette opération avec des templates.
    Si ton souci est juste le nommage de fonction, alors les define sont faits exactement pour ça.

    Bousk - contre la stigmatisation du preprocesseur.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Points : 764
    Points
    764
    Par défaut
    Citation Envoyé par Bousk Voir le message
    je ne vois pas comment tu peux réaliser cette opération avec des templates.
    Le concept reste le même, c'est juste la forme qui diffère un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template<typename Name>
    void createContainer();
     
    template void createContainer<UneClasse>();
    Après, tout dépend de l'utilisation qui est fait de cette abstraction dans le code de mister. Parce que, à ce niveau là, autant écrire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void createUneClasseContainer();

  6. #6
    Invité
    Invité(e)
    Par défaut
    - contre la stigmatisation du preprocesseur.
    Je ne stigmatise du préprocesseur, mais je trouve qu'il est quand meme beaucoup plus difficile de maintenir du code préprocesseur que du code templaté... Notamment à cause de certaines restrictions (pas de surcharge par exemple), de la difficulté qu'on peut avoir face au moment d'évalution des paramètre, de la difficulté le DRY... (quoique boost.pp soit un outils fantastique quand l'on fait du préprocesseur). Au contraire, en travaillant avec les templates, on a beaucoup moins de risque de se tirer une balle dans le pied... Donc on ne "génère" des fonctions à l'aide de macros que quand l'on ne peut pas faire autrement (mais uniquement dans ce cas là)

  7. #7
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut
    Petit rappel : Tous les bons auteurs, à commencer par le créateur du C++, recommandent fortement d'éviter les macros comme la peste...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/08/2008, 15h56
  2. Ne pas utiliser un id existant pour nommer une fonction javascript..
    Par guiguich dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/11/2007, 23h26
  3. Exécution macro avec une fonction intégré
    Par kiwi31 dans le forum VBA Access
    Réponses: 13
    Dernier message: 22/05/2007, 16h18
  4. [EXCEL] Execution dune macro dans une fonction SI
    Par Sef974 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/07/2006, 13h25
  5. [VBA-E]Etablir une macro d'une fonction rechercheV
    Par dani317 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/10/2005, 11h06

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