2009-09-22 5 views
2

J'ai fait un peu de lecture en ligne sur la façon de procéder et je pense que je le fais correctement ... Mon but est d'avoir un tableau d'objets de structure contenant des pointeurs vers les fonctions-membres d'une classe.C++: Pointeur vers la fonction de membre de classe à l'intérieur d'une structure non apparentée

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 veux réellement utiliser l'argument listes), je reçois "gestionnaire": Identificateur non déclaré ...

Je dois manquer quelque chose, je ne sais pas quoi.

Répondre

8

someFunc() n'est pas une méthode statique, vous avez donc 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; 
Questions connexes