簡體   English   中英

Boost函數:存儲boost :: bind返回的任何函數?

[英]Boost function: store any function returned by boost::bind?

我想編寫一個異步計時器,在經過一定時間后調用一個函數。 現在我想能夠使用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是否已經提供了一種機制來實現這一目標? 經過長時間的搜索,我找不到太多內容, boost::thread的內部也看起來好像沒有為這種用途預定義。 也許boost::function_base 文檔說你可能不會直接創建它。 有提升方式,還是我必須自己編寫這些容器類?

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

我認為boost :: asio提供了一些執行此操作的機制,本教程似乎正是您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM