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
InformationsquelleAutor wolfPack88 | 2014-05-15