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

Langage C++ Discussion :

Petit problème avec une macro!


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Petit problème avec une macro!
    Salut!

    J'ai créer une macro pour simplifier la syntaxe lors de la création de fonctions de callback pour la résolution de la surcharge de fonction sur les adresses des fonctions, ce qui donne ceci :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #define REGISTER_FUNC(funcName, FID, TYPE, __VA__ARGS_, args...) \
    void (TYPE::*f##funcName##FID)(__VA__ARGS_) = &TYPE::vt##funcName; \
    ....

    funcName et FID sont juste des identifiants que j'utilise pour stocker le pointeur sur fonction.

    TYPE est le type de classe de la fonction membre.

    VA_ARGS la liste des types des arguments de la fonction.

    Et args... sont les valeurs des arguments de la fonction.

    Mais j'ai une erreur en compilation lors de la déclaration du pointeur de fonction, on dirait que la macro foire en tout cas elle ne me donne pas le code que j'attendais.
    Et je me retrouve avec cette erreur en compilation ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    main.cpp|78|error: cannot declare pointer to void member
    main.cpp|78|error: cannot convert ‘C*’ to ‘void C::*’ in initialization
    Merci d'avance pour l'aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par défaut
    __VA__ARGS_ ou __VA_ARGS__ ? Et args là dedans ?

    Je verrais plus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define REGISTER_FUNC(funcName, FID, TYPE, ...) \
      void (TYPE::*f##funcName##FID)(__VA_ARGS__) = &TYPE::vt##funcName
    Mais utilise cpp (C PreProcessor ou gcc -E ou autre) pour "dérouler" les macros. Il y a juste à mettre la macro et un appel de celle-ci dans un fichier pour faire les tests.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Re,

    __VA_ARGS__ plutôt.

    args me sert ici, je sais pas si c'est possible d'avoir plusieurs paramètres variadique dans une macro.

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #define REGISTER_FUNC(ID, funcName, FID, BASE, TYPE, __VA_ARGS__ , args...) \
    REGISTER_TYPE(ID, BASE, TYPE) \
    void (TYPE::*f##ID##funcName##FID)(__VA_ARGS__ ) = &TYPE::vt##funcName; \
    odfaeg::FastDelegate<void> delegate##ID##funcName##FID (f##ID##funcName##FID, args); \
    odfaeg::BaseFact<BASE>::register_function(typeid(TYPE).name(), #funcName, #FID, delegate##ID##funcName##FID);

    Car j'ai besoin des deux, types et valeurs pour les paramètres de la fonction de callback.

  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
    Le principe du var_args c'est de prendre tous les paramètres "en plus"
    par quelle espèce de magie penses-tu pouvoir dire au compilateur "prend tous les paramètres 'en plus' dans var_args mais pas ceux 'en plus' que tu prends dans args..", oui comme tu le lis, ça n'a aucun sens
    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 Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par défaut
    Ceci dit, il est possible de faire plusieurs groupes en les englobant entre parenthèses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #define DISPATCH_ARGS(...) __VA_ARGS__
     
    #define REGISTER_FUNC(ID, funcName, FID, BASE, TYPE, types , values) \
    REGISTER_TYPE(ID, BASE, TYPE) \
    void (TYPE::*f##ID##funcName##FID) types = &TYPE::vt##funcName; \
    odfaeg::FastDelegate<void> delegate##ID##funcName##FID (f##ID##funcName##FID, DISPATCH_ARGS values); \
    odfaeg::BaseFact<BASE>::register_function(typeid(TYPE).name(), #funcName, #FID, delegate##ID##funcName##FID);
     
    REGISTER_FUNC(1, xxx, x1, base, inherit, (int, int), (4, 5))

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ok c'est ce que je voulais savoir, merci.

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

Discussions similaires

  1. Petit problème avec une DropDownList
    Par Dohmaker dans le forum VB.NET
    Réponses: 6
    Dernier message: 20/09/2007, 18h19
  2. Problème avec une macro faisant apel à un tableau Excell
    Par valouche dans le forum Macros et VBA Excel
    Réponses: 52
    Dernier message: 19/06/2007, 12h38
  3. Petit problème avec une procédure stockée
    Par Poulain dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/05/2007, 18h58
  4. Petits problèmes avec une CListCtrl
    Par vanitom dans le forum MFC
    Réponses: 2
    Dernier message: 17/11/2005, 11h45
  5. (Petit ?) problème avec une page contenant du Flash
    Par ologram dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/09/2005, 18h45

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