2013-03-19 18 views
6

内側のラムダでこれを捕捉するために任意のより良い方法はありますか?lambdaのlambda関数で "this"を取り込む方法は?例</p> <pre><code>class A { void f() {} void g() { [this]() // Lambda capture this { f(); A* p = this; [p]() // Workaround to let inner lambda capture this { p->f(); }; }; } }; </code></pre> <p>については

+1

@JesseGood、他の人 - それはMSVSについてではありませんので、これは、他の質問のだまされやすい人ではありません。 – einpoklum

答えて

6

ちょうど[=]を使用してください。これは暗黙のうちに取得されます。コピーでキャプチャしたくない他の変数がある場合は、[this]をキャプチャしてください。

+0

ちょうど理解のために、なぜ[[&] '? –

+0

@ bash.d: 'this 'はコピーでしか捕捉できません。すなわち' [this] 'や' [=] 'です。 –

+0

@JesseGoodよろしくお願いします。 –

5

あなたは可能性だけで再キャプチャthis

class A 
{ 
    void f() {} 
    void g() 
    { 
     [this]() 
     { 
      f(); 
      [this]() 
     // ^^^^ 
      { 
       f(); 
      }; 
     }; 
    } 
}; 
+0

私のVS2010では動作しません。 – user1899020

+0

@ user1899020:OK、VS2010を使用する場所がわからないので、そこでテストしませんでした。 VC10のlambdaの実装は準拠していないと思います。 –

+2

@ user1899020 VS10はLambda V1.0のみをサポートし、V1.1はサポートしていないようです。http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language -features-in-vc10-the-table.aspx。 – inf

関連する問題

 関連する問題