我创建了一个Timer类,当计时器到期时必须调用一个回调方法 . 目前我使用普通函数指针(它们被声明为void(*)(void),当Elapsed事件发生时,调用函数指针 .
是否可以使用也具有签名void(AnyClass :: *)(void)的成员函数执行相同的操作?
谢谢你的队友 .
编辑:此代码必须在Windows上以及在实时操作系统(VxWorks)上运行,因此不使用外部库会很棒 .
EDIT2:只是为了确定,我需要的是有一个Timer类,它在构造函数中使用参数来获取“AnyClass.AnyMethod”而不带参数并返回void . 我必须存储这个参数,后者在代码的一个点上只执行这个变量指向的方法 . 希望很清楚 .
5 回答
依赖关系,依赖关系...是的,确定提升很好,mem_fn也是如此,但你不需要它们 . 但是,调用成员函数的语法是邪恶的,所以一点模板魔术有助于:
现在你可以使用Callback作为回调存储机制,这样:
和
我用于同一目的的最佳解决方案是boost::signal或boost::function库(取决于您是否需要单个回调或其中许多),并且boost::bind实际注册回调 .
也许标准mem_fun已经足够你想要的了 . 它是STL的一部分 .
boost::function看起来非常适合这里 .
我假设这样的界面:
我认为更好的解决方案是升级call callback以使用boost :: function或自己开发的版本(如Kornel的回答) . 然而,这需要真正的C开发人员参与,否则你很可能会引入错误 .
我的解决方案的优点是它只是一个模板功能 . 不是很多都可能出错 . 我的解决方案的一个缺点是它可能会使用强制转换为
void*
并返回 . 请注意,只有AnyClass*
指针作为void*
传递给回调注册 .