Ответ 1
В соответствии с § 5.1.2 в стандарте (N3485) определение лямбда-захвата:
lambda-capture: capture-default capture-list capture-default , capture-list capture-default: & = capture-list: capture ... opt capture-list , capture ... opt capture: identifier & identifier this
Таким образом, вы можете иметь идентификаторы =
, &
, this
, identifier, &
в списке захвата. Вы не можете использовать выражения, например, this
для .
Некоторые простые выражения в списке захвата в более высоких версиях (-std=c++1y
) доступны, например:
auto myLambda = [self = static_cast<MyClass const*>(this)](){
// Use `self` instead of `this` which is `const`
};
Конечно, это не похоже на захват this
, что вы можете получить доступ к элементам так же, как локальные переменные.