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

kfm*_*e04 2 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
};
Run Code Online (Sandbox Code Playgroud)
int main(int argc, char** argv)
{
    Foo foo;

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

lin*_*r27 9

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

#include <functional>
std::function<bool (int)> m_callback;
Run Code Online (Sandbox Code Playgroud)

这是从Visual Studio 2010完成的.


bob*_*mcr 7

auto关键字只能与初始化表达式一起使用.

所以...这有效:

auto callback = [](int x){ return x == 0; };
Run Code Online (Sandbox Code Playgroud)

......但这不是:

auto callback;
callback = [](int x){ return x == 0; };
Run Code Online (Sandbox Code Playgroud)

我建议您使用类似于function特定签名的内容来表示回调.

  • @MatthieuM.:在C++ 11中,完全删除了作为存储指定符的`auto`. (2认同)