C ++: pointeur vers la fonction de membre de la classe à l'intérieur d'une structure non apparentée
-
13-09-2019 - |
Question
Je l'ai fait un peu de lecture en ligne quant à la façon d'aller à ce sujet et je crois que je le fais correctement ... Mon objectif est d'avoir un tableau d'objets de structure qui contiennent des pointeurs vers les fonctions-membres d'un classe.
Voici ce que j'ai jusqu'à présent ...
typedef void (foo::*HandlerPtr)(...);
class foo
{
public:
void someFunc(...);
// ...
private:
// ...
};
struct STRUCT
{
HandlerPtr handler;
};
STRUCT stuff[]
{
{&foo::someFunc}
};
Ensuite, lorsque vous appelez la fonction à l'aide (. Substance [0] * gestionnaire) (), avec ou sans arguments (je ne compte en fait d'utiliser des listes d'arguments), je reçois « gestionnaire »: identifiant ... Présence non déclarée
Je dois manquer quelque chose, ne savent pas quoi.
La solution
someFunc () n'est pas une méthode statique, donc vous avez besoin d'une instance d'objet foo pour appeler someFunc () via votre variable pointeur à la méthode, à savoir:
foo f;
f.*(stuff[0].handler)();
Ou:
foo f;
HandlerPtr mthd = stuff[0].handler;
f.*mthd();
Ou, en utilisant des pointeurs:
foo *f = new foo;
f->*(stuff[0].handler)();
delete f;
Ou:
foo *f = new foo;
HandlerPtr mthd = stuff[0].handler;
f->*mthd();
delete f;