如何从另一个lambda函数

时间:2017-11-21 00:09:19

标签: c++ lambda

考虑下面的设法类,方法A()包含两个lambda函数,a1()和a2()。我希望能够从a1内部调用a2。但是,当我这样做时,(a1中的第二行),我得到了错误

错误:无法隐式捕获变量“因为未指定默认捕获模式”

我不明白这条错误信息。我应该在这里捕捉到什么?我知道在lambda定义中使用 [this] 可以让我访问foo类中的方法,但是我不清楚如何做我想要的。

先谢谢你让我直截了当。

class foo
{
   void A()
   {
      auto a2 = [this]() -> int
      {
         return 1;
      };

      auto  a1 = [this]() -> int
         {
            int result;
            result = a2();
            return result;
         };

      int i = a1();
      int j = a2();
   }
};

1 个答案:

答案 0 :(得分:8)

您需要捕获a2才能在a2的正文中使用a1。简单地捕获this不会捕获a2;捕获this只允许您使用封闭类的非静态成员。如果您希望默认捕获a2,则需要指定=&作为捕获默认值。

[this, &a2]  // capture a2 by reference
[this, &]    // capture all odr-used automatic local variables by reference, including a2