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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    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

  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 éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Merci

    Je vais quand même tenter avec des template..

  4. #4
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    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 chevronné

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

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    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à)

+ 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