gpt4 book ai didi

c++ - 如何使用 C++ 成员函数作为 C 框架的回调函数

转载 作者:IT老高 更新时间:2023-10-28 22:33:34 24 4
gpt4 key购买 nike

有一个支持回调函数类型的 C 库(我无法更改)

void (*callback)(void *appContext, int eventid)

我想设置一个 C++ 函数作为回调。

具体我有以下问题?

  1. 是否需要在"extern C" block 下声明回调函数?

  2. 成员函数是否必须是静态的才能成为回调函数?是否可以使用非静态成员函数?如果是,如何?什么时候推荐使用非静态成员函数?

  3. 函数是否是模板函数有关系吗?

  4. 非类 C 风格的函数比类成员函数有什么优势吗?

我正在旧的 VC++ 编译器上尝试这些变体,它不支持最新的 C++ 标准。但是代码需要独立于平台,并且应该适用于大多数 C++ 编译器。我想知道回调的推荐做法是什么?

最佳答案

回调函数需要在extern "C"下声明吗?

没有。仅当您从 C 中直接调用 C++ 函数而不使用函数指针时才需要 extern "C"。如果使用函数指针,则不需要 extern "C"。

我可以使用非静态成员函数作为回调吗?

没有。 A类的非静态成员函数有一个隐含的第一个参数对应于这个指针。

我可以使用静态成员函数作为回调吗?

是的,只要签名与回调的签名匹配。

函数是否为模板函数有关系吗?

不,只要实例化模板的签名与回调匹配,模板函数就可以用作回调。

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

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