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

时间:2013-03-19 21:08:33

标签: c++ c++11 lambda

例如

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

有什么更好的方法可以在内部lambda中捕获它?

2 个答案:

答案 0 :(得分:8)

只需使用[=],即可隐式捕获。如果您有其他您不希望通过副本捕获的变量,那么只需捕获[this]

答案 1 :(得分:5)

您可以重新捕获this

class A
{
    void f() {}
    void g()
    {
        [this]()
        {
            f();
            [this]()
        //   ^^^^
            {
                f();
            };
        };
    }
};