我正在使用第三方库,它允许我注册某些事件的回调。寄存器函数看起来像这样。它使用回调签名。
typedef int (*Callback)(std::string);
void registerCallback(Callback pCallback) {
//it gets registered
}
我的问题是我想将成员函数注册为回调,如下所示
struct MyStruct {
MyStruct();
int myCallback(std::string str);
};
MyStruct::MyStruct() {
registerCallback(&MyStruct::myCallback);
}
int MyStruct::myCallback(std::string str) {
return 0;
}
当然,编译器会抱怨说
错误 C2664: 'registerCallback' : 无法将参数 1 从 'int (__thiscall MyStruct::* )(std::string)' 转换为 'Callback'
我一直在研究像 function 和 bind 这样的 boost 库,但这些库似乎都不能解决问题。我一直在谷歌上搜索答案,但我什至不知道该怎么称呼它,所以它没有多大帮助。
提前致谢。
您试图将成员函数指针作为普通函数指针传递,这是行不通的。成员函数必须具有this
指针作为隐藏参数之一,而普通函数则不然,因此它们的类型不兼容。
You can:
- 更改参数的类型以接受成员函数并接受实例作为调用对象
- 停止尝试传递成员函数并传递普通函数(也许通过使函数
static
)
- 有一个普通函数,它接受类的实例、成员函数指针和
std::string
并使用类似 boost 的东西bind
绑定前两个参数
- 使回调注册函数接受函子对象,或者
std::function
(我想就是这个名字)
- 还有许多其他方法,我不会在这里详细介绍,但您应该明白了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)