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:”捕获-以逗号分隔的零个或多个捕获列表,可以选择以捕获默认值开头。“