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 № 1Pro §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.