2

私はこれをどうやって行うかについてオンラインで少し読んだことがあり、正しくやっていると思います...私の目標は、クラスのメンバー関数へのポインターを含む構造体オブジェクトの配列を持つことです。

これが私がこれまでに持っているものです...

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

struct STRUCT
{
    HandlerPtr handler;
};

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

次に、引数の有無にかかわらず(stuff[0]。*handler)()を使用して関数を呼び出すと(実際には引数リストを使用するつもりです)、「handler」を取得します:宣言されていない識別子...

私は何かが欠けている必要があります、ただ何がわからないのです。

4

1 に答える 1

8

someFunc()は静的メソッドではないため、メソッドへのポインタ変数を介してsomeFunc()を呼び出すには、fooオブジェクトインスタンスが必要です。

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

または:

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

または、ポインタを使用します。

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

または:

foo *f = new foo;
HandlerPtr mthd = stuff[0].handler;
f->*mthd();
delete f;
于 2009-09-22T23:36:52.667 に答える