2013-03-19 9 views
6

Zum BeispielWie man "das" in Lambda-Funktion in Lambda-Funktion erfasst?

class A 
{ 
    void f() {} 
    void g() 
    { 
     [this]() // Lambda capture this 
     { 
      f(); 
      A* p = this; 
      [p]() // Workaround to let inner lambda capture this 
      { 
       p->f(); 
      }; 
     }; 
    } 
}; 

ein besserer Weg, dies in dem inneren Lambda zu erfassen?

+1

@JesseGood, andere - das ist kein Narr die andere Frage ist, da es sich nicht um MSVS ist. – einpoklum

Antwort

6

Verwenden Sie einfach [=], dies wird implizit erfasst. Wenn Sie andere Variablen haben, die Sie nicht kopieren wollen, erfassen Sie einfach [this].

+0

Nur zum Verständnis, warum nicht '[&]'? –

+0

@ bash.d: 'this' kann nur durch Kopieren erfasst werden, d. H.' [This] 'oder' [=] '. –

+0

@JesseGood OK, danke, gut zu wissen. –

5

Sie könnten nur wieder einzufangen this:

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

In meinem VS2010 funktioniert es nicht. – user1899020

+0

@ user1899020: OK, wusste nicht, wo Sie VS2010 verwenden, also habe ich es dort nicht getestet. Ich denke, die Implementierung von Lambdas in VC10 ist nicht konform. –

+2

@ user1899020 Es scheint, dass VS10 nur Lambdas V1.0 und nicht V1.1 unterstützt, siehe hier http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language -features-in-vc10-the-table.aspx. – inf

Verwandte Themen