0

を使用して関数をコールバックするための引数としてクラスと構造体のインスタンスを渡す問題を探していて、立ち往生していますboost::bind

これまでのところ、このメソッドを使用したコールバックは正常に機能します。以下のコードスニペットを使用したい

class A
{
  public :
  static int i = 1;

};

ただし、このクラス インスタンスを、後述するこのコールバック関数ポインタに渡したい

void Init(void (*Notify)(A *a, int, int,int),int arr[],
          A *a, value,int left,int right)
{

}
4

1 に答える 1

0

Boost Bind を直接使用してこれを行うことはできません。関数には、次のシグネチャInitを持つフリー関数へのポインターが必要です。

void (*)(A *a, int, int, int)

したがって、次のように実装できます。

void foo(A *a, int x, int y, int z)
{
    a->whatever(x, y, z);
}

次に、 を呼び出しますInit(foo, ...)

しかし、それは自由な機能でなければなりません。多少同等の Boost Bind 式は機能しません。

boost::bind(&A::whatever, _1, _2, _3)

なぜこれがうまくいかないのですか?Initは無料の機能を必要とするため、たとえばboost::function<void(A*,int,int,int>)>をサポートする ではありませんboost::bind

于 2013-10-07T14:01:22.087 に答える