如何从另一个lambda函数调用lambda函数

Dav*_*vid 7 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();
   }
};
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 9

你需要捕获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
Run Code Online (Sandbox Code Playgroud)

  • @David在什么意义上`[this,&]`不起作用? (4认同)