gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:14:30 25 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/42483077/

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