c++ - 将 C++ 成员函数作为回调函数传递
问题描述
我正在尝试在 STM32 中使用回调寄存器。我正在用 C++ 编写大部分接口,希望有朝一日完全独立于 HAL,但我目前正在使用它来加快开发速度。
我正在定义一个 UART 类,并为我定义的每个 UART 外围设备调用它。现在我启用了 CallBacks,并且我相信我可以定义一个回调函数并将其作为指针传递。Rx CallBack 定义如下
void (* RxCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Rx Complete Callback */
这是当 Rx 缓冲区已满时对该回调的调用
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) /*Call registered Rx Half complete callback*/
huart->RxCpltCallback(huart);
在我的课程中,我计划有一个 CallBack 函数,并在我的初始化中将它的指针传递给这个函数。
但遗憾的是它不知道如何将类的成员函数转换为函数。
这是我在该部分的构造函数中的代码
uartx.RxCpltCallback=rx_cplt_callback;
这是我班级中回调函数的代码
void uart::rx_cplt_callback(__UART_HandleTypeDef* uart_)
这是它在尝试编译时给我的错误代码。
cannot convert 'uart::rx_cplt_callback' from type 'void (uart::)(__UART_HandleTypeDef*)' to type 'void (*)(__UART_HandleTypeDef*)'
26 | uartx.RxCpltCallback=rx_cplt_callback;
老实说,我不知道如何在课堂外不编写代码的情况下解决这个问题。是的,可以肯定的是,我可以在将我引导到该函数的类中编写函数,但这会破坏目的。
非常感谢。
问候利雅得
解决方案
推荐阅读
- debugging - 我在 ubuntu 20.04 上使用 Geany 1.36,但我没有找到调试器插件,我该如何调试?
- python - 访问用户位置(只有城市名称)(不是地图)
- python - Python:在导入时从另一个文件接收空列表
- xamarin - 在 Xamarin Android 中归档时出错
- javascript - 如何在 laravel/Alpinejs 应用程序中定义 App Component 中的常用功能?
- gradle - TeamCity - Gradle 本地存储库/离线缓存
- wagtail - 如何在 wagtails 模型管理中添加额外的自定义视图?
- ubuntu - 如何更改 nginx 文档根目录以指向 ubuntu 20.10 中不同分区中的文件夹?
- android - 打开应用程序时如何创建浮动通知?
- google-analytics - 阻止谷歌分析 - /etc/hosts