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.

È stato utile?

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top