回调参数假定类表示法

Callback Argument assuming class notation

提问人:Ivo Ribeiro 提问时间:5/16/2023 更新时间:5/16/2023 访问量:28

问:

我在 API 上定义了一个提取方法,该方法需要 ID 和回调功能。

extractAsync(const std::string &name, void (*callback)(int)

但是我在类中定义回调函数,因为我需要访问其中的其他内容

class CommandBuilder { public: //... void onExtractionChanged(int result); }

我的问题是,因为它在类内部,当我作为参数传递时,它说无效的参数类型。

argument of type "void (CommandBuilder::*)(int result)" is incompatible with parameter of type "void (*)(int)"

(为了解释问题,我简化了一些代码,如果你还有其他疑问请问)

我试过什么:

  • Lambda 函数;
  • 从类中删除(无法访问我需要的其他内容,也无法将它们作为参数传递)
  • 添加到类中(给出这个奇怪的错误,因为它不是'void()(int)',而是'void (CommandBuilder::)(int result)')
C++ 回调 签名 AsyncCallback

评论

1赞 Some programmer dude 5/16/2023
指向非成员函数的指针和指向(非静态)成员函数的指针是不一样的。它们不兼容,不能互换使用。可以修改功能吗?如果没有,那么除了使对象实例成为全局变量并使用成员函数之外,您实际上无能为力。extractAsyncstatic
1赞 Retired Ninja 5/16/2023
您可以修改回调以传递 void 指针吗?然后,您可以使用它来传递指针,以便可以使用静态函数。this
1赞 fabian 5/16/2023
通常,回调有一个类型的参数,该参数为您提供注册时传递的值。由于 API 似乎不提供此功能,因此您唯一的选择是在此处使用全局(引用您的)对象......void*
0赞 463035818_is_not_an_ai 5/16/2023
您似乎意识到了问题和可能的解决方案,但缺少的是您的代码。请发布一个最小的可重现示例
0赞 molbdnilo 5/16/2023
您是否也简化了回调接口?如果是这样,请发布真实的。

答: 暂无答案