1
struct A
{
  A(int v):value(v){}
  int someFun(){return value;}
  int someOtherFun(int v=0){return v+value;}
  int value;
};

int main()
{
    boost::shared_ptr<A> a(new A(42));
    //boost::function<int()> b1(bind(&A::someOtherFun,a,_1)); //Error
    boost::function<int()> b2(bind(&A::someFun,a));
    b2();
    return 0;
}

bind(&A::someOtherFun,a)();コンパイルエラーで失敗します:エラー:非静的メンバー関数の無効な使用

someFunと同様にsomeOtherFunをバインドする方法は?つまり、同じboost::functionタイプにバインドする必要があります。

4

1 に答える 1

2

A::someFun()さまざまなタイプがありA::someOtherFun()ます。1つ目はパラメーターを期待せず、2つ目は1を期待します(これは省略でき、コンパイラーはデフォルト値を挿入します)

試す:

bind(&A::someOtherFun, a, _1)(1);

問題は、を介して関数を呼び出すとbind()、コンパイラはそのバインドされた関数のデフォルトのパラメータ値があることを認識せず、必要なパラメータがないためにエラーが発生することです。

于 2012-06-07T12:35:44.293 に答える