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 :

Methode en parametre


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 19
    Par défaut Methode en parametre
    Bonjour,

    j'ai une fonction F1 qui prend en paramètre une autre fonction F2, tout fonctionne bien quand ma fonction F2 est déclarée en global.

    J'ai besoin à présent de donner en paramètre une méthode d'une classe, quand je le fais le compilateur me dit que les arguments ne correspondent pas.

    donc si je fais :
    Objet O ;

    mafonction ( O.lamethode );

    Peut-on passer en paramètre une méthode ???

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Si tu passes une fonction membre, il faudra aussi passer un objet sur lequel l'appeler. Attention aussi à la syntaxe pour tout ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void mafonction(void (Objet::*Func)(void), Objet& Obj)
    {
        (Obj.*Func)();
    }
     
    Objet O;
    mafonction(&Objet::lamethode, O);

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    S'il n'est pas possible ou pratique de passer aussi un objet, on peut lier un objet à une de ses fonctions membres pour pouvoir les appeler comme une fonction à l'aide de std::mem_fun et std::mem_fun_ref :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    template<typename Function>
    void maFonction(Function f)
    {
        f();
    }
     
    Objet O;
    maFonction(std::mem_fun_ref(&Objet::laMethode), O);

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ne pas oublier aussi boost::function et boost::bind pour encore plus de souplesse.

  5. #5
    Membre averti
    Inscrit en
    Février 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 19
    Par défaut
    roulious, ta technique ne s'applique qu'avec des templates ?

    Parce que sans template, il me dit que :

    ‘mem_fun_ref’ is not a member of ‘std’ .

    Sinon, n'y a-t-il pas moyen de déférencer la fonction ou quelque chose comme ça ?

    Car la fonction appelante est en fait, une fonction d'OpenGl ( callBack ), que je ne peux modifier.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    mem_fun_ref est inclus dans l'en-tête <functional>. De plus, ton code sera plus générique si tu utilises des foncteurs à la place de fonctions au type fixé. Jette un oeil sur la doc de mem_fun_ref et de boost::bind pour plus d'informations à ce sujet.

    <edit>
    Je n'avais pas vu que la fonction appelant venait d'OpenGL. Dans ce cas, il faudra que tu crées une fonction avec le bon prototype pour OpenGL qui appelle les fonctions membres de tes objets.
    </edit>

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

Discussions similaires

  1. Réponses: 23
    Dernier message: 05/11/2013, 01h28
  2. methode sans parametres
    Par allstar dans le forum Général Python
    Réponses: 1
    Dernier message: 28/12/2012, 19h07
  3. [HTTP]passage de parametres via la methode post
    Par abdou.sahraoui dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 03/03/2008, 14h11
  4. Réponses: 8
    Dernier message: 21/08/2006, 19h05
  5. Réponses: 5
    Dernier message: 19/07/2004, 11h16

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