如何保存lambda以便以后回调?

时间:2011-11-08 05:40:08

标签: c++ lambda c++11

如何修复下面的代码来存储lambda,以便稍后调用它?

我目前得到的错误是字段'm_callback'类型不完整

class Foo
{
    public:
        Foo()  { }
        ~Foo() { }

        template< typename FuncT > 
        void setCallback( FuncT&& callback )
        {
            m_callback = callback;
        }

    private:
        auto m_callback;   // this line is broken
};
int main(int argc, char** argv)
{
    Foo foo;

    foo.setCallback( [] (int x){ return true; } );

    return 0;
}

2 个答案:

答案 0 :(得分:9)

不能使用auto关键字。我推荐使用这样的东西:

#include <functional>
std::function<bool (int)> m_callback;

这是从Visual Studio 2010完成的。

答案 1 :(得分:7)

auto关键字只能与初始化表达式结合使用。

所以......这很有效:

auto callback = [](int x){ return x == 0; };

......但这不是:

auto callback;
callback = [](int x){ return x == 0; };

我建议您使用function之类的特定签名来表示回调。