使用 C 类成员函数作为 C 回调函数

新手上路,请多包涵

我有一个 C 库,需要注册一个回调函数来自定义一些处理。回调函数的类型是 int a(int *, int *)

我正在编写类似于以下内容的 C++ 代码,并尝试将 C++ 类函数注册为回调函数:

 class A {
  public:
   A();
   ~A();
   int e(int *k, int *j);
};

A::A()
{
   register_with_library(e)
}

int
A::e(int *k, int *e)
{
  return 0;
}

A::~A()
{

}

编译器抛出以下错误:

 In constructor 'A::A()',
error:
 argument of type ‘int (A::)(int*, int*)’ does not match ‘int (*)(int*, int*)’.

我的问题:

  1. 首先,是否可以像我尝试做的那样注册一个 C++ 类成员函数,如果可以,怎么做? (我在 http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html 阅读了 32.8。但在我看来它并不能解决问题)
  2. 有没有替代/更好的方法来解决这个问题?

原文由 Methos 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

如果成员函数是静态的,则可以这样做。

A 类的非静态成员函数有一个隐式的第一个参数类型 class A* 对应于 这个 指针。这就是为什么只有在回调的签名也具有 class A* 类型的第一个参数时才能注册它们的原因。

原文由 sharptooth 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题