2012-03-02 12 views
1

functorの実装をstd::tr1::functionに変換しています(私の実装では、関数型ごとに型とファンクタのクラスをあらかじめ定義する必要があります、私はこれをどんな関数でも動作させるために拡張したい)。std :: tr1 :: function - 共通のコンテナにさまざまな型の関数オブジェクトを格納する

私は

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

持っていると私はいくつかの共通のコンテナ

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

にこれを追加したいので、コンテナを宣言するためにどのように、どのようなタイプには、任意の型の機能を受け入れるようにしなければなりませんか?まったく可能ですか?

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

someContainer.begin().invoke(); 

P.S.たぶん別の解決策があるかもしれませんが、私はこのトピックで十分に認識していません。答えに感謝します。

私はGNU C++ 98を扱います。 「任意のタイプ」で、あなたが同じシグネチャを持つすべての関数オブジェクト(ファンクタ)を意味している場合

答えて

1

は、それは簡単です:

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

これはパラメータを取らず、voidを返す任意の関数オブジェクトのベクトルを作成します。 。

(*someContainer.begin())(); 

普通の関数オブジェクトのようにそれを呼び出す関数を呼び出すには

関連する問題