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 :

Pointeur de fonction sur fonction membre


Sujet :

C++

  1. #1
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut Pointeur de fonction sur fonction membre
    Bonjour,

    Je cherche à faire un pointeur de fonction sur une fonction membre.

    J'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int (MyClass::*f3)(int) = &MyClass::myFunction;
    (MyClass::*f3)(-3);
    Ca marche à l'initialisation, mais impossible à l'exécuter, la 2e ligne ne fonctionne pas ...

  2. #2
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    Il fallait instancier un objet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int (MyClass::*f3)(int) = &MyClass::myFunction3;  
    (this->*f3)(-3);

  3. #3
    Membre éclairé

    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    Points : 837
    Points
    837
    Par défaut
    C'est bizarre ça...

    Tu as déclaré ta variable f3 plus haut?

  4. #4
    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
    Non c'est correcte, ça se déclare comme ça un pointeur de fonction (membre)
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  5. #5
    Membre averti Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Points : 323
    Points
    323
    Par défaut
    Peut être une info intéressante ici:
    http://jlecomte.ifrance.com/c++/c++-...embers-fr.html

    Pour faire simple, voila comment on appelle un pointeur de fonction membre:
    ((object).*(ptrToMember))(argument)

    Dans notre cas ce serai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MyClass myclass;
    ((myclass).*(f3))(-3);
    En effet il te faut une instance de ta class sur laquelle exécuter ta méthode.
    (A moins que cette méthode n'utilise pas de variable interne a ta class, mais c'est un sujet qui as déjà été débattu)

  6. #6
    Membre éclairé

    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    Points : 837
    Points
    837
    Par défaut
    En effet, ce lien précise:
    type est "int (Fred::*)(char,float)" s'il s'agit d'une fonction membre non statique d'une classe Fred
    Note: Si la fonction est une fonction membre statique d'une classeFred, son type est le même que celui d'une fonction ordinaire: "int (*)(char,float)".
    Ah, les mystères du C++


    Modif: Si on comprend que le pointeur de fonction n'a aucune idée de sur quelle instance de la classe il s'applique la notation est relativement logique.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017

  8. #8
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    Il se cachait bien ce tuto, j'avais regardé dans la FAQ mais n'avais pas trop ^^
    Finallement j'avais trouvé grâce à notre cher ami google.

    Merci encore pour votre intervention, ça fait toujours plaisir de voir qu'il y a une communauté pour répondre aux questions qu'on se pose :-)

  9. #9
    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
    La communauté est un critère important dans le choisit d'un langage, d'une technologie ou d'un outils

    On est là pour l'entretenir donc merci à toi de référer à cette communauté.
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

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

Discussions similaires

  1. Appel de fonction entre fonction sur architecture complexe
    Par mek-in-gold dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/03/2008, 19h07
  2. [POO] Pointeur sur fonction membre et héritage
    Par MrDuChnok dans le forum C++
    Réponses: 9
    Dernier message: 20/07/2006, 17h19
  3. Pointeur sur fonction membre avec parametre
    Par Glosialabolas dans le forum C++
    Réponses: 7
    Dernier message: 06/02/2006, 02h32
  4. Réponses: 10
    Dernier message: 03/02/2005, 13h09
  5. Réponses: 5
    Dernier message: 12/01/2005, 20h58

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