【发布时间】:2018-04-14 07:36:19
【问题描述】:
我正在使用第 3 方库,它允许我为某些事件注册回调。注册函数看起来像这样。它使用回调签名。
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 库,但似乎没有一个能够解决问题。我一直在谷歌上搜索答案,但我什至不知道该怎么称呼它,所以没有太大帮助。
提前致谢。
【问题讨论】:
-
谢谢大家!我发现另一篇提出同样问题的帖子,看起来共识只是使成员函数成为普通函数或使其成为静态函数。 link。除非有人有一些非常疯狂的 TMP 技巧?
标签: c++ function boost bind signature