2011-01-30 13 views
0

だから持つ:C++この(何がこのような状況で、現在のクラスへのリンクになります)

struct A { void foo(int) { } }; 

typedef std::function<void(int)> Function; 
typedef std::vector<Function>  FunctionSequence; 
typedef FunctionSequence::iterator FunctionIterator; 

FunctionSequence funcs; 

A a; 

funcs.push_back(std::bind(&A::foo, &a, std::placeholders::_1)); 
funcs.push_back(std::bind(&B::bar, &b, std::placeholders::_1)); 

// this calls a.foo(42) then b.bar(42): 
for (FunctionIterator it(funcs.begin()); it != funcs.end(); ++it) 
    (*it)(42); 

我々はfuncs.push_back加入クラスA内だったら、私は理解している場合、我々は代わりに&athis

+0

あなたがC++ 0xのであれば、ラムダ式を使用します。 – Puppy

答えて

3

のだと思います正しくあなたの質問には、答えはイエスでなければなりません。 variable上呼ばれるインスタンスメソッドにより見られるよう&variableは常にthisに等しいです。

1

はい、論理的に聞こえますが、それは単なる推測です。

Aからご登録の場合は、Aのこの特定のインスタンスにコールバックを保存しますか?そうなら、あなたはthisを必要としています。

私たちはあなたのニーズを知らないので、3つの変種(&a,&bまたはthis)がすべて正しいケースを想像することができます。

関連する問題