首页 > 后端开发 > C++ > 如何将 C 类成员函数注册为 C 回调?

如何将 C 类成员函数注册为 C 回调?

Barbara Streisand
发布: 2024-12-11 19:36:14
原创
780 人浏览过

How Can I Register C   Class Member Functions as C Callbacks?

将 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);
}
登录后复制

替代方法

  • 功能指针: 创建一个指向 C 成员函数的函数指针,并将其注册到库中。
int e(int *k, int *j) {
    A a;
    return a.e(k, j);
}

A::A() {
    register_with_library(e);
}
登录后复制
  • 函子: 创建一个函子类它重写了operator()来调用C成员函数。将仿函数的实例注册为回调。
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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板