1

ファンクターの実装を次のように変換していますstd::tr1::function(私の実装では、関数の型ごとに型とファンクター クラスを事前定義する必要があるため、これを拡張して任意の関数で動作するようにしたいためです)。

私は持っている

int param = 1;
std::tr1::bind (&MyClass::func, param);

これを共通のコンテナに追加したい

someContainer.insert (std::tr1::bind (&MyClass::func, param));

では、コンテナを宣言する方法、任意の型の関数を受け入れるにはどの型でなければなりませんか? それはまったく可能ですか?

2 番目の質問 - 次のように、コンテナ内で関数を呼び出す方法:

someContainer.begin().invoke();

PS別の解決策があるかもしれませんが、このトピックでは十分に認識していません。答えてくれてありがとう。

GNU C++98 を扱っています。

4

1 に答える 1

1

「任意の型」とは、同じシグネチャを持つすべての関数オブジェクト (ファンクタ) を意味する場合、簡単です。

std::vector< std::tr1::function<void()> >  someContainer;

これにより、パラメーターをとらず、void を返す任意の関数オブジェクトのベクトルが作成されます。

関数を呼び出すには、通常の関数オブジェクトのように呼び出します。

(*someContainer.begin()) ();
于 2012-05-31T16:35:01.657 に答える