如何在 lambda 中捕获函数结果?
How can I capture a function result in a lambda?
我想知道我是否可以捕获函数结果:
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 = [copy = a.func()] () { std::cout << copy; };
// ^ no int
您也可以在捕获组中创建多个不同类型的实体,只要您将它们分开 ,
:
auto lambda = [x = a.func(), y = a.func2()] () { std::cout << x << y; };
这是一个demo。
我想知道我是否可以捕获函数结果:
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 = [copy = a.func()] () { std::cout << copy; };
// ^ no int
您也可以在捕获组中创建多个不同类型的实体,只要您将它们分开 ,
:
auto lambda = [x = a.func(), y = a.func2()] () { std::cout << x << y; };
这是一个demo。