如何保存lambda以供以后回调

How do I save a lambda for later callback?

本文关键字:回调 lambda 何保存 保存      更新时间:2023-10-16

我如何修复下面的代码来存储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;
}

auto关键字不能这样使用。我建议使用如下命令:

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

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

所以…如此:

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

…但这不是:

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

我建议您使用function之类的东西,带有特定的签名来表示回调