【问题标题】:How can I capture a function result in a lambda?如何在 lambda 中捕获函数结果?
【发布时间】:2020-10-02 15:25:56
【问题描述】:

我想知道我是否可以捕获函数结果:

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; }

【问题讨论】:

  • ...是吗?你可以精确地做到这一点。但是删掉int这个词

标签: c++ lambda capture


【解决方案1】:

语法略有不同。捕获组中实体的类型是从初始化器推导出来的,不能显式指定类型:

auto lambda = [copy = a.func()] () { std::cout << copy; };
           // ^ no int

你也可以在捕获组中创建多个不同类型的实体,如果你只是用,分隔它们:

auto lambda = [x = a.func(), y = a.func2()] () { std::cout << x << y; };

这是demo

【讨论】:

  • 不错。对于多个变量?你能做到 [a = a.func(), b = a.func2()] () { } ???我用逗号隔开...
  • @Zebrafish 是的,你可以。请参阅 cppreference.com 上的 Lambda expressions:“捕获 - 零个或多个捕获的逗号分隔列表,可选择以捕获默认值开头。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多