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 : Sélectionner tout - Visualiser dans une fenêtre à part
typedef void (Automate::* Function_t)(void);
Une structure qui contient un membre pointeur de fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
        if(a.Function != NULL) (a.Function)();
Mais bien sûr "syntax error" et je n'arrive pas à comprendre comment le message :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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