gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 14:00:48 29 4
gpt4 key购买 nike

我有一个 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. 是否有替代/更好的方法来解决这个问题?

最佳答案

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

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

关于c++ - 使用 C++ 类成员函数作为 C 回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1000663/

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