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

发布于 2024-12-14 00:10:57 字数 541 浏览 0 评论 0原文

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

How do I fix the code below to store a lambda so I can invoke it at a later time?

The error I currently get is field 'm_callback' has incomplete type.

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;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

疯了 2024-12-21 00:10:57

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

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

这是从 Visual Studio 2010 完成的。

The auto keyword can't be used liked that. I recommend using something like this:

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

This is done from Visual Studio 2010.

酒废 2024-12-21 00:10:57

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

所以...这有效:

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

...但这不行:

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

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

The auto keyword can only be used in conjunction with an initalization expression.

So... this works:

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

... but this doesn't:

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

I would recommend that you use something like function with a specific signature to represent a callback.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文