提升函数:存储由boost::bind返回的任何函数

Boost function: store any function returned by boost::bind?

本文关键字:函数 返回 任何 bind 存储 boost      更新时间:2023-10-16

我想编写一个异步计时器,在经过一定时间后调用函数。现在,我希望能够使用 boost::bind() 将函数与计时器在经过一定间隔后调用的任何签名绑定。我现在这样做的方式受到 boost 线程的启发,它有一个抽象的基类来存储线程函数。这就是我所做的:

        class TimedFunctionBase
        {
        public:
            virtual void call() = 0;
        };
        typedef std::shared_ptr<TimedFunctionBase> TimedFunctionBasePtr;
        template<class F>
        class TimedFunction : public TimedFunctionBase
        {
        public:
            TimedFunction(F _f):
            m_function(_f)
            {
            }
            void call()
            {
                m_function();
            }
        private:
            F m_function;
        };

然后,在计时器函数中,我只需保存回调,如下所示:

MyAsyncTimer
{
private:
    TimedFunctionBasePtr m_callback;
};

并在定时函数中调用它

m_callback->call();

我的问题实际上很简单:boost是否已经提供了一种机制来做到这一点?经过长时间的搜索,我真的找不到太多东西,boost::thread的内部看起来也好像没有什么预定义的这种用途。也许boost::function_base?文档说您不能直接创建它。是否有一种提升方式,还是我必须自己编写这些容器类?

boost::bind + boost::function 就是你所需要的。IIRC,这就是线程的作用。

我认为boost::asio提供了一些机制来做到这一点,本教程似乎正是您想要的。