/ / Capturing const dies - C ++, C ++ 11, Lambda

Capturing const dies - C ++, C ++ 11, Lambda

Ich habe jetzt eine Objektfunktion mit einem Lambda, um Memberfunktionen und Variablen zu verwenden (oder natürlich alle zu erfassen):

void MyClass::MyFunc() {

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

Gibt es eine Möglichkeit, explizit eine Const zu erfassen? Ich weiß, ich könnte:

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

Vielen Dank.

Antworten:

4 für die Antwort № 1

Pro §5.1.2 im Standard (N3485) ist die Definition von Lambda-Capture ist:

Lambda-Capture: Capture-Standard Aufnahmeliste Capture-Standard, Capture-Liste Capture-Standard: & = Aufnahmeliste: erfassen ... opt Capture-Liste, Capture ... opt Erfassung: Kennung & Kennung diese

Also, du kannst nur haben =, &, this, Kennung, & Kennung in der Aufnahmeliste. Du kannst keine Ausdrücke haben, zum Beispiel Casting this zu einem const.

Einige einfache Ausdrücke in der Capture-Liste in höheren Versionen (-std=c++1y) ist zum Beispiel verfügbar:

auto myLambda = [self = static_cast<MyClass const*>(this)](){

// Use `self` instead of `this` which is `const`

};

Natürlich ist es nicht wie beim Capturen this dass Sie auf Mitglieder wie lokale Variablen zugreifen können.