L'appel de pointeur de fonction membre C++
J'ai un pointeur vers une fonction membre défini dans une classe, par exemple:
class Example {
void (Example::*foo)();
void foo2();
};
Dans mon code principal, je puis mettre foo que:
Example *a;
a->foo = &Example::foo2;
Cependant, lorsque j'essaie d'appeler foo:
a->foo();
J'ai le temps de compilation d'erreur: "erreur: l'expression précédente entre parenthèses de l'apparente appel doit avoir (pointeur-vers-) type de fonction". Je suis en supposant que je me fais de la syntaxe mal quelque part, quelqu'un peut-il à moi?
(a->*(a->foo))()
- Je pense?- Malheureusement, cela ne fonctionne pas. a->*foo() renvoie "erreur: foo est pas défini" et un->*(a->foo)() donne le message d'erreur d'origine.
- vous avez besoin des parenthèses autour de
a->*(a->foo)
raison de la façon dont la priorité de l'opérateur travaille - vous n'avez pas à vous inquiéter au sujet de l'étrange syntaxe si vous liez à la fonction membre pour quelque chose comme
std::function
, mais vous fera payer un peu pour les frais généraux de l'indirection le faire. - Découvrez le C++ FAQ: parashift.com/c++-faq/pointers-to-members.html
Vous devez vous connecter pour publier un commentaire.
appeler ça vous ferait:
(a->*(a->foo))()
(a->*X)(...)
- déréférence un pointeur de fonction membre - les parenthèses autour dea->*X
sont importants pour la préséance.X = a->foo
- dans votre exemple.Voir ideone ici pour exemple