C++ 如何在lambda中捕获函数结果?
我想知道是否可以捕获函数结果:C++ 如何在lambda中捕获函数结果?,c++,lambda,capture,C++,Lambda,Capture,我想知道是否可以捕获函数结果: int main() { struct A { int a; int func() { return a; } }; A a; auto lambda = []() {}; // I WANT THE LAMBDA TO HAVE A COPY OF a.func(); // In other words I want capture the return value of a.func() }
int main()
{
struct A { int a; int func() { return a; } };
A a;
auto lambda = []() {};
// I WANT THE LAMBDA TO HAVE A COPY OF a.func();
// In other words I want capture the return value of a.func()
}
有办法做到这一点吗?我知道在新的C++标准中,你可以在捕获列表中创建新的变量,这样的事情是什么?
auto lambda = [int copy = a.func()] () { cout << copy; }
auto lambda=[int copy=a.func()](){cout语法稍有不同。捕获组中实体的类型是从初始值设定项推导出来的,您不能显式指定类型:
auto lambda = [copy = a.func()] () { std::cout << copy; };
// ^ no int
下面是一个。语法略有不同。捕获组中实体的类型是从初始值设定项推导出来的,您不能显式指定类型:
auto lambda = [copy = a.func()] () { std::cout << copy; };
// ^ no int
这是一个。…是的?你可以做到这一点。但是删除int
…是的?你可以做到这一点。但是删除int
Nice这个词。对于多个变量呢?你能做到[a=a.func(),b=a.func2()](){}吗?我用逗号分隔了它…@Zebrafish是的,你可以。请参阅cppreference.com:“捕获-以逗号分隔的零个或多个捕获列表,可以选择以捕获默认值开头。“很好。对于多个变量,您可以执行[a=a.func(),b=a.func2()](){}?”我用逗号分隔它…@Zebrafish是的,您可以。请参阅cppreference.com:”捕获-以逗号分隔的零个或多个捕获列表,可以选择以捕获默认值开头。“