Rozważmy następujący kod:Dlaczego nie udało mi się uchwycić "tego" wskaźnika przez lambdę?
class A
{
public:
void foo()
{
auto functor = [this]()
{
A * a = this;
auto functor = [a]() // The compiler won't accept "this" instead of "a"
{
a->bar();
};
};
}
void bar() {}
};
W VC2010, używając this
zamiast a
prowadzić do błędów kompilacji. Między innymi:
1>main.cpp(20): error C3480: '`anonymous-namespace'::<lambda0>::__this': a lambda capture variable must be from an enclosing function scope
1>main.cpp(22): error C3493: 'this' cannot be implicitly captured because no default capture mode has been specified
Których nie rozumiem. Czy to oznacza, że nie wie, czy powinien użyć referencji, czy skopiować? Gdy próbuje użyć &this
zmusić odniesienie, mówi także:
1>main.cpp(20): error C3496: 'this' is always captured by value: '&' ignored
Tymczasowy nie jest to irytujące, ale ze względu na ciekawość, czy jest jakiś sposób, aby się go pozbyć? Co się dzieje, gdy this
podaje się lambda?
Działa poprawnie w GCC 4.6.1, nawet z '[this]'. –
@KerrekSB Warto wiedzieć ... Dzięki za test! – Gabriel
Wygląda to na [błąd # 560907] (https://connect.microsoft.com/VisualStudio/feedback/details/560907/capturing-variables-in-nested-lambdas) (niestety zamknięty jako 'WONTFIX'). –