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

时间:2011-05-05 15:24:05

标签: c++ function boost

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

然后,在timer函数内部,我只需按如下方式保存回调:

MyAsyncTimer
{
private:
    TimedFunctionBasePtr m_callback;
};

并使用

在定时函数内调用它
m_callback->call();

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

我认为boost :: asio提供了一些机制来执行此操作,这tutorial似乎正是您想要的。