首页 >后端开发 >C++ >C 类成员函数可以用作 C 回调吗?

C 类成员函数可以用作 C 回调吗?

Barbara Streisand
Barbara Streisand原创
2024-12-15 07:36:14553浏览

Can C   Class Member Functions Be Used as C Callbacks?

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

问题:

何时尝试将 C 类成员函数注册为 C 库的回调函数时,编译器会抛出错误,表明函数的类型与预期的签名不匹配。

问题:

  1. 是否可以将 C 类成员函数注册为回调函数?
  2. 是否有其他方法可以解决这个问题问题?

答案:

1.使用静态成员函数:

是的,可以将 C 类成员函数注册为回调函数,但它必须是 静态成员函数。静态成员函数没有类型 A* 的隐式第一个参数,因此它们的签名与预期的回调签名匹配。例如:

class A {
public:
    static int e(int *k, int *j) {
        return 0;
    }
};

int main() {
    register_with_library(A::e);
    return 0;
}

2。替代方法:

或者,您可以使用以下方法之一:

  • 创建自由函数:使用适当的方法创建自由函数签名并从其中调用 C 类成员函数。例如:
void e_wrapper(int *k, int *j) {
    A().e(k, j);
}
  • 使用函数指针:定义一个函数指针,并将C类成员函数的地址赋给它。例如:
int (*ptr)(int *, int *) = &A::e;
register_with_library(ptr);

以上是C 类成员函数可以用作 C 回调吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn