Boost函数:存储boost :: bind返回的任何函数?

mok*_*oka 4 c++ boost function

我想编写一个异步计时器,在经过一定时间后调用一个函数.现在我希望能够使用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;
        };
Run Code Online (Sandbox Code Playgroud)

然后,在timer函数内部,我只需保存回调,如下所示:

MyAsyncTimer
{
private:
    TimedFunctionBasePtr m_callback;
};
Run Code Online (Sandbox Code Playgroud)

并在定时函数内调用它

m_callback->call();
Run Code Online (Sandbox Code Playgroud)

我的问题其实非常简单:boost是否已经提供了一种机制来实现这一目标?经过长时间的搜索后,我找不到太多内容,内部boost::thread也看起来好像没有为这种用途预定义.也许boost::function_base?文档说你可能不会直接创建它.有提升方式,还是我必须自己编写这些容器类?

Joe*_*cou 5

boost :: bind + boost :: function就是你所需要的.和IIRC,这就是线程所做的.