提升函数:存储由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;
};
然后,在计时器函数中,我只需保存回调,如下所示:
MyAsyncTimer
{
private:
TimedFunctionBasePtr m_callback;
};
并在定时函数中调用它
m_callback->call();
我的问题实际上很简单:boost是否已经提供了一种机制来做到这一点?经过长时间的搜索,我真的找不到太多东西,boost::thread
的内部看起来也好像没有什么预定义的这种用途。也许boost::function_base
?文档说您不能直接创建它。是否有一种提升方式,还是我必须自己编写这些容器类?
boost::bind + boost::function 就是你所需要的。IIRC,这就是线程的作用。
我认为boost::asio提供了一些机制来做到这一点,本教程似乎正是您想要的。
相关文章:
- 从函数返回const char*数组
- 检查函数返回类型是否与STL容器类型值相同
- 从 c 或 cpp 系列子函数返回到主函数
- 从函数返回任意简单类型的数据
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 从 C++ 中的函数返回数组地址问题
- VirtDisk.h QueryChangesVirtualDisk() 函数返回 RangeCount 为 0
- 为什么glGetSubroutineIndex为不同的函数返回相同的值?
- 在 c++ 中将函数返回类型指定为模板参数
- 从封装在对象中的函数 C++ 返回时为空的列表
- 为什么向量内部的指针在从函数返回时会发生变化?
- 函数返回的 rvalue 引用(表达式)是 xvalue - 但没有标识?
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- 寿命延长从函数返回引用
- 程序不向函数返回值
- 字符串函数返回奇怪的值
- 类的大问题,以及从空函数c++返回
- 为什么在尝试测量函数返回所需的时间时,我的运行时编号是错误的?
- C++二叉搜索树模板从函数返回节点
- NVCC 错误:string_view.h:constexpr 函数返回是非常量