Frage

Ich habe Online ein bisschen Lesen getan, wie um dies zu realisieren, und ich glaube, ich mache es richtig ... Mein Ziel ist es, eine Reihe von Strukturobjekten zu haben, die Zeiger auf Elementfunktionen eines enthalten Klasse.

Hier ist, was ich bisher ...

typedef void (foo::*HandlerPtr)(...);
class foo
{
public:
    void someFunc(...);
    // ...
private:
    // ...
};

struct STRUCT
{
    HandlerPtr handler;
};

STRUCT stuff[]
{
    {&foo::someFunc}
};

Dann, wenn die Funktion mit dem Rufnummer (. Stuff [0] * Handler) (), mit oder ohne Argumente (Ich beabsichtige eigentlich Argumentlisten verwenden), erhalte ich "Handler": nicht deklarierter Bezeichner ...

Ich habe etwas zu fehlen, weiß nur nicht, was.

War es hilfreich?

Lösung

someFunc () ist kein statisches Verfahren, so dass Sie eine foo Objektinstanz benötigen, um someFunc () über Ihren Zeiger-to-Methode Variable zu nennen, das heißt:

foo f;
f.*(stuff[0].handler)();

Oder:

foo f;
HandlerPtr mthd = stuff[0].handler;
f.*mthd();

Oder mit Zeiger:

foo *f = new foo;
f->*(stuff[0].handler)();
delete f;

Oder:

foo *f = new foo;
HandlerPtr mthd = stuff[0].handler;
f->*mthd();
delete f;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top