捕获const这个

时间:2015-02-17 07:18:41

标签: c++ c++11 lambda

现在我有一个带有lambda的对象函数,以便使用我必须使用的成员函数和变量(或者当然捕获所有..):

void MyClass::MyFunc() {

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

有没有办法明确表示捕获const这个?我知道我可以:

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

感谢。

1 个答案:

答案 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不同,您可以像访问本地变量一样访问成员。