如何在 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