gpt4 book ai didi

C++ 函数回调 : Cannot convert from a member function to a function signature

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:53 24 4
gpt4 key购买 nike

我正在使用第 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;
}

当然,编译器会提示,说

error C2664: 'registerCallback' : cannot convert parameter 1 from 'int (__thiscall MyStruct::* )(std::string)' to 'Callback'

我一直在研究像 function 和 bind 这样的 boost 库,但它们似乎都无法解决问题。我一直在谷歌上搜索答案,但我什至不知道如何调用它,所以没有太大帮助。

提前致谢。

最佳答案

您正试图将成员函数指针作为普通函数指针传递,但这是行不通的。成员函数必须将 this 指针作为隐藏参数之一,而普通函数并非如此,因此它们的类型不兼容。

您可以:

  1. 更改参数类型以接受成员函数并接受一个实例作为调用对象
  2. 停止尝试传递成员函数并传递普通函数(也许通过使函数static)
  3. 有一个接受类实例的普通函数、一个成员函数指针和一个 std::string 并使用类似 boost 的 bind 来绑定(bind)第一个两个参数
  4. 让回调注册函数接受一个仿函数对象,或者一个std::function(我想这就是名字)
  5. 还有许多其他方法,我不会在这里详细说明,但您应该明白了。

关于C++ 函数回调 : Cannot convert from a member function to a function signature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8045322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com