class Foo
{
double f1(int x, std::string s1);
double f2(int x, SomeClass s2);
}
私はその後、私は他の関数へのパラメータとして関数func1とfunc2のを渡すエッセンスでブーストバインドクラス関数ポインタ
typedef double (Foo::* MyFooFunc)(int)
MyFooFunc func1 = boost::bind(&Foo::f1, _1, _2, "some string");
MyFooFunc func2 = boost::bind(&Foo::f2, _1, _2, SomeClass);
を作成するためのfooのインスタンスなしFoo.f1のS1をバインドできるようにしたいです、その内側にはFooは最終的にバインドされます。
void SomeOtherFunction(MyFooFunc func)
{
Foo foo;
boost::function< double (int) > finalFunc =
boost::bind(func, foo, _1);
}
質問: はこの可能ですか?はい、1)それを達成する方法? 2)MyFooFuncの宣言は何ですか?
それはSomeOtherFunction'が宣言されている 'に依存する(再度、他の
boost::function
タイプは、REF対非constとは対照的に、REF対CONSTを渡すなどの詳細に応じて可能です) 。あなたの2番目のtypedefは関数ポインタではなく、それは全く別の互換性のない概念であるPTMF(pointer-to-member-function)です。 'std :: function'や' std :: tr1 :: function'や 'boost :: function'の全てをラップするのがおそらく最も強力な解決策です。 –実際には2つの問題があります。1)インスタンスなしでPTMFをバインドする。 2)ブースト関数としてバインドの結果を表現する。 1)のために、boost :: bind(&Foo :: f1、_1、_2、 "hello")を試しました。それはうまくいかなかった。 2)については、boost :: function、int)>と思われます。 –