2011-02-09 8 views
45

:lambda, statik üye işlevini çağırmak için 'bunu' kaydetmeyi mi gerektiriyor? Aşağıdaki kod için

struct B 
{ 
    void g() 
    { 
     []() { B::f(); }(); 
    } 

    static void f(); 
}; 

g ++ 4.6 hata verir:

test.cpp: In lambda function:
test.cpp:44:21: error: 'this' was not captured for this lambda function

(İlginç bir şekilde, g ++ 4.5 kod ince derler).

Bu, g ++ 4.6'daki bir hata mı, yoksa statik üye işlevini çağırabilmek için 'bu' parametresini yakalamak gerçekten gerekli mi? Neden olduğunu anlamıyorum, hatta B:: ile aramayı bile nitelendirdim.

+17

Bu, bir hata olur. –

+2

Yine de GCC 4.7.2'deki bir hata. Bu 'yakalama' olarak eklemek hala işe yarıyor. –

+1

GCC 4.8'de düzeltilmiştir. – akim

cevap

32

Katılıyorum, sadece iyi derlemesi gerekir. Düzeltme için (zaten bilmiyordunuz), sadece referans yakalama ekleyin ve gcc 4.6

+27

Lambda'nın daha çirkin yapmış olabilir mi? Cevap verme. En azından onları aldık. – wheaties

+32

@wheaties Bir şekilde çalışamayacaklarını hayal kırıklığına uğrattım. Tam köşeli parantezler kümesine gitmek için ... – KitsuneYMG

+20

@KitsuneYMG: http://msdn.microsoft.com/en-us/library/dd293599.aspx adresinde bir örnek var: auto g = [] (int x) -> işlev {return [=] (int y) {dönüş x + y; }; }; – TonyK

İlgili konular