Utilisation d'un pointeur de fonction membre
Bonjour,
Cela fait quelques heures que je cherche la syntaxe et que je ne trouve pas.
Un pointeur de fonction sur fonction membre de classe :
Code:
typedef void (Automate::* Function_t)(void);
Une structure qui contient un membre pointeur de fonction :
Code:
1 2 3 4 5 6
| typedef struct
{ int State;
int Event;
Function_t Function;
int NextState;
} Automate_t; |
Une variable locale de type Automate_t :
Code:
const Automate::Automate_t a = { 0, 1, NULL, 0 }; // peu importe si la syntaxe n'est pas très bonne, c'est pour l'exemple
Et enfin la tentative (pour l'instant) d'appel :
Code:
if(a.Function != NULL) (a.Function)();
Mais bien sûr "syntax error" et je n'arrive pas à comprendre comment le message :
Code:
1 2 3
| Automate.cpp:30: erreur : must use '.*' or '->*' to call pointer-to-member function in 'a.Automate::Automate_t::Function (...)', e.g. '(... ->* a.Automate::Automate_t::Function) (...)'
(a.Function)();
^ |
Bien sûr, j'ai fait plusieurs tentatives et variations autour de cette syntaxe mais je ne trouve pas.
Challenge : qui trouveras la solution et la syntaxe correcte ?
PS : Pour info (et bien que cela ne soit pas utile dans ce cas), c'est pour un automate à états finis