C++ 什么';这是在c+;中按值捕获成员变量的一种好方法+;11?

C++ 什么';这是在c+;中按值捕获成员变量的一种好方法+;11?,c++,c++11,g++,C++,C++11,G++,我想知道为什么删除了这个功能,因为它非常有用 我不认为您可以在C++11中直接实现这一点(请参阅@Nawaz的评论了解解决方法)。但是,C++14在这种情况下可以通过以下方式提供帮助: auto-px=[v=this->z]()//按值捕获一个成员变量 { std::coutLambdas只能捕获声明它们的本地作用域的成员。它们不能通过复制或引用捕获成员变量 但是,C++14的广义lambda捕获可以完成这项工作: #include <functional> #include &l

我想知道为什么删除了这个功能,因为它非常有用

我不认为您可以在C++11中直接实现这一点(请参阅@Nawaz的评论了解解决方法)。但是,C++14在这种情况下可以通过以下方式提供帮助:

auto-px=[v=this->z]()//按值捕获一个成员变量
{ 

std::coutLambdas只能捕获声明它们的本地作用域的成员。它们不能通过复制或引用捕获成员变量

但是,C++14的广义lambda捕获可以完成这项工作:

#include <functional>
#include <iostream>

struct myclass {
    myclass(): z{} {}
    myclass(int qx): z(qx) {   }
    std::function<void()> create() {
        auto px = [v = this->z]() {
            std::cout << v << std::endl;
        };
        return px;
    }
    int z;
};

int main()
{
    myclass my;
    my.z = 2;
    auto func = my.create();
    func();
    my.z = 3;
    func();
}

解决方法:
auto z=this->z;auto px=[z]{…};
@Nawaz是的,谢谢。
error: 'this' was not captured for this lambda function
auto px = [v = this->z]() // capture by value just ONE member variable
{ 
        std::cout << v << std::endl;
};
#include <functional>
#include <iostream>

struct myclass {
    myclass(): z{} {}
    myclass(int qx): z(qx) {   }
    std::function<void()> create() {
        auto px = [v = this->z]() {
            std::cout << v << std::endl;
        };
        return px;
    }
    int z;
};

int main()
{
    myclass my;
    my.z = 2;
    auto func = my.create();
    func();
    my.z = 3;
    func();
}
auto px = [z = z](){
    std::cout << z << std::endl;
};
auto z = this->z;
auto px = [z](){
    std::cout << z << std::endl;
};