首页 > 解决方案 > 如何使用静态 C++ 方法作为 Poco 计时器的回调?

问题描述

特别是我在谈论这个 Poco 类的构造函数:Poco.TimerCallback

我想在遗留的 C++ 代码中使用它,其中我编写的大多数类都是“静态的”,因此它们只包含静态方法而没有构造函数,只是因为无论如何我都不需要此类对象的多个实例,而且类仅用于封装。好吧,Poco 的人建议添加这样的回调方法:

TimerCallback<MyClass> callback(*this, &MyClass::onTimer);
timer.start(callback);

我对这段代码的理解是否正确:MyClass::onTimer也可能是 的静态方法MyClass,但我还需要 的当前实例MyClass,这样未实例化的静态类的方法就被简单地禁止用作TimerCallback,还是我错了?

谢谢你。

标签: timerpoco-libraries

解决方案


我不会称它为“禁止”——函数回调只是没有实现,没有什么能阻止你自己实现它(如果你愿意的话,把它作为贡献发回)。

我只是扩展TimerTaskAdapter,这样它就不需要对象实例,例如。像这样的东西:

typedef void (*FunctionCallback)(TimerTask&);
TimerTaskAdapter(FunctionCallback func): _pObject(0), _method(0), _func(func){}
...
FunctionCallback _func;

然后检测TimerTaskAdapter::run()什么是null以及是否调用方法或函数:

void run()
{
    if (_pObject) (_pObject->*_method)(*this);
    else (*_func)(*this);
}

推荐阅读