2012-11-30 7 views
2

Possible en double:
How to best pass methods into methods of the same classpointeur de fonction de classe en tant que paramètre

Je ne l'ai jamais eu des problèmes en passant un pointeur de fonction en tant que paramètre. Cela fonctionne:

void functionThatTakesFPTR(void(*function)(int), int someValue){ 
    function(someValue); 
    } 

void printValue(int value){ 
    std::printf("%d",value); 
} 

int main(int argc, char** argv){ 
    functionThatTakesFPTR(&printValue, 8); 

    return EXIT_SUCCESS; 
} 

Cependant, en passant la fonction d'objet ne

void MyClass::setter(float value){ } 

void MyClass::testFunction(void(*setterPtr)(float)){ } 

void MyClass::someFunc(){ 
    testFunction(&(this->setter)); 
} 

Pour moi, cela ressemble à passer l'adresse de ce lieu de la fonction, et je suis un peu confus. Est-il possible de le faire? Et est-il possible de passer le pointeur de fonction d'objet d'une autre classe (par exemple MyClass2)? Editer: Erreur que je reçois est "class 'MyClass' n'a aucun membre 'setter'".

+0

http://www.parashift.com/c++-faq/pointers-to-members.html –

Répondre

6

Le problème est qu'un appel à une méthode nécessite également une référence à l'instance de classe. Vous ne pouvez pas simplement appeler une méthode de classe comme une fonction autonome.

Vous devez savoir environ Pointer-to-Member Functions.

+5

Vous ne pouvez pas simplement marcher dans Mordor. – Yakk

+0

Génial! C'est tout à fait logique, maintenant. Merci! – Mercurial

Questions connexes