在非静态成员函数中使用c ++ 11 lambda并调用同一类的静态成员函数

时间:2012-06-18 05:01:29

标签: c++ lambda c++11

  

可能重复:
  lambdas require capturing 'this' to call static member function?

我想在非静态成员函数中使用c ++ 11 lambda并调用同一类的静态成员函数:

class A {
    static void a() {}
public:
    void x() {
        [] () { A::a(); }();
    }
};

但是gcc4.6和gcc4.7都出错了: 错误:没有为此lambda函数捕获'this'

为什么lambda需要'this',因为'a'是一个静态成员函数。

如果'x'是静态的或'a'是其他类的静态成员函数,'this'不是必需的,为什么?

1 个答案:

答案 0 :(得分:1)

class A {
    static void a() {}
public:
    void x() {
        [] () { A::a(); }();
    }
};

int main() { A a; a.x(); }

用clang 3.2编译好。此外,没有理由不应该编译。根据笔记,这是GCC中的bug。这应该在4.7.1中修复。请注意,gcc早期开始,但在支持某些C ++ 11功能方面落后于clang。

编辑:您可能想要查看类似的SO question