将 C 类成员函数注册为 C 回调函数
在使用需要回调函数的 C 库时,我们可能会遇到需要注册的情况C类成员函数。但是,尝试将非静态成员函数注册为回调会导致编译器错误。
我们可以注册 C 类成员函数吗?
是的,可以可以使用静态成员函数将 C 类成员函数注册为回调函数。
静态成员函数方法
静态成员函数没有类类型的隐式第一个参数。因此,它们的签名与回调函数的预期类型匹配,从而允许它们成功注册。
示例
class A { public: static int e(int *k, int *j) { return 0; } }; A::A() { register_with_library(A::e); }
替代方法
int e(int *k, int *j) { A a; return a.e(k, j); } A::A() { register_with_library(e); }
struct EF { A* a; int operator()(int *k, int *j) { return a->e(k, j); } }; A::A() { EF ef = {this}; register_with_library(ef); }
方法的选择取决于 C 库的具体要求以及所需的封装和可重用性级别。
以上是如何将 C 类成员函数注册为 C 回调?的详细内容。更多信息请关注PHP中文网其他相关文章!