C++ 什么';这是在c+;中按值捕获成员变量的一种好方法+;11?
我想知道为什么删除了这个功能,因为它非常有用 我不认为您可以在C++11中直接实现这一点(请参阅@Nawaz的评论了解解决方法)。但是,C++14在这种情况下可以通过以下方式提供帮助: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
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;
};