[英]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.