Подтвердить что ты не робот

Захват const this

прямо сейчас у меня есть функция объекта с лямбдой, чтобы использовать функции-члены и переменные, которые я должен был бы (или, конечно, захватить все..):

void MyClass::MyFunc() {

    auto myLambda = [this](){...};
}

Есть ли способ явно указать, чтобы зафиксировать const? Я знаю, что мог:

void MyClass::MyFunc() {
    MyClass const* const_my_class = this;
    auto myLambda = [const_my_class](){...};
}

Спасибо.

4b9b3361

Ответ 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, что вы можете получить доступ к элементам так же, как локальные переменные.