如何在lambda中的lambda函数中捕获"this"?

use*_*020 9 c++ lambda c++11

例如

class A
{
    void f() {}
    void g()
    {
        [this]() // Lambda capture this
        {
            f();
            A* p = this;
            [p]() // Workaround to let inner lambda capture this
            {
                p->f();
            };
        };
    }
};
Run Code Online (Sandbox Code Playgroud)

有什么更好的方法来捕捉内在的lambda?

inf*_*inf 8

只是使用[=],这是隐含的捕获.如果你有其他变量,你不想通过副本捕获,那么只需捕获[this].

  • @yngum:即使使用`[&]`,代码也很容易通过副本捕获`this`. (3认同)
  • @bash.d:`this`只能通过复制来捕获,即`[this]`或`[=]`。 (2认同)
  • @yngum:`this`是一个prvalue(一个临时的),你不能引用temporaries.[参见此处的示例](http://liveworkspace.org/code/230dyr$7)和错误消息:`错误:'此'无法通过引用捕获. (2认同)

And*_*owl 5

你可以重新捕获this:

class A
{
    void f() {}
    void g()
    {
        [this]()
        {
            f();
            [this]()
        //   ^^^^
            {
                f();
            };
        };
    }
};
Run Code Online (Sandbox Code Playgroud)

  • @ user1899020似乎VS10只支持Lambdas V1.0而不支持V1.1,请参见http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language- features-in-vc10-the-table.aspx. (2认同)