我想创建一个带有回调函数的类,可以使用外部函数作为回调,或者默认情况下该类将分配一个成员函数作为回调。请看我的代码示例:
#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);
}
如代码中所提到的,样例只有在定义'static'时才能正常工作。当不使用static关键字时,会出现以下错误:
无法将类型为“void(Foo ::)()”的“Foo :: defaultCallback”转换为类型“Foo :: CallbackType {aka std :: function}”但是,我也想将此类用作父类,并且希望将'defaultCallback'定义为虚拟函数(这在同时定义为静态函数时不可能)。是否有人建议如何使代码在不使用静态成员函数作为默认构造函数参数的情况下正常工作?