现在我有一个带有lambda的对象函数,以便使用我必须使用的成员函数和变量(或者当然捕获所有..):
void MyClass::MyFunc() {
auto myLambda = [this](){...};
}
有没有办法明确表示捕获const这个?我知道我可以:
void MyClass::MyFunc() {
MyClass const* const_my_class = this;
auto myLambda = [const_my_class](){...};
}
感谢。
答案 0 :(得分:4)
标准(N3485)中的§5.1.2, lambda-capture 的定义是:
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
,标识符,&
标识符捕获列表。您不能拥有表达式,例如将this
投射到const
。
更高版本(-std=c++1y
)的捕获列表中的一些简单表达式是可用的,例如:
auto myLambda = [self = static_cast<MyClass const*>(this)](){
// Use `self` instead of `this` which is `const`
};
当然,与捕获this
不同,您可以像访问本地变量一样访问成员。