我想用回调函数创建一个类,应该有可能使用外部函数作为回调,否则该类将默认分配一个成员函数作为回调。在这里查看我的代码示例:
#include <functional>
class Foo
{
public:
typedef std::function<void(void)> CallbackType;
Foo(CallbackType callback = defaultCallback): _callback(callback) {}
// code sample works only if this function is defined static:
static void defaultCallback(void) {}
CallbackType _callback;
};
void externCallback(void) {}
int main()
{
Foo fooExtern(externCallback);
}
如代码中所述,该示例仅在将'defaultCallback'定义为静态时才有效。当不使用static关键字时,出现错误:
无法将类型“ void(Foo ::)()”中的“ Foo :: defaultCallback”转换为“ Foo :: CallbackType {aka std :: function}”类型
但是,我也希望能够将此类用作父类,并且希望将“ defaultCallback”定义为虚拟(将其定义为静态时是不可能的)。有没有人建议我如何在不使用静态成员函数作为默认构造函数参数的情况下使代码工作?
class Foo
{
public:
using CallbackType = std::function<void(void)>;
Foo() : Foo([this]{defaultCallback();}) {}
explicit Foo(CallbackType callback) : _callback(callback) {}
void defaultCallback(void) {}
CallbackType _callback;
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句