C ++: Puntatore funzione membro della classe all'interno di una struttura non-correlata
-
13-09-2019 - |
Domanda
Ho fatto un po 'di lettura on-line su come andare su questo e penso che sto facendo correttamente ... Il mio obiettivo è quello di avere una matrice di oggetti di struttura che contengono i puntatori agli stati-funzioni di un classe.
Ecco quello che ho finora ...
typedef void (foo::*HandlerPtr)(...);
class foo
{
public:
void someFunc(...);
// ...
private:
// ...
};
struct STRUCT
{
HandlerPtr handler;
};
STRUCT stuff[]
{
{&foo::someFunc}
};
Poi, quando si chiama la funzione utilizzando (. Roba [0] * handler) (), con o senza argomenti (io in realtà intenzione di utilizzare le liste di argomenti), ottengo "gestore": identificatore non dichiarato ...
Devo essere manca qualcosa, solo che non so che cosa.
Soluzione
somefunc () non è un metodo statico, quindi è necessario un istanza di un oggetto foo per chiamare somefunc () tramite la variabile puntatore-a-metodo, vale a dire:
foo f;
f.*(stuff[0].handler)();
o
foo f;
HandlerPtr mthd = stuff[0].handler;
f.*mthd();
In alternativa, usando puntatori:
foo *f = new foo;
f->*(stuff[0].handler)();
delete f;
o
foo *f = new foo;
HandlerPtr mthd = stuff[0].handler;
f->*mthd();
delete f;