C++ 中的 C 库回调,不带指向"this"的指针

C Library Callback in C++ without pointer to "this"

本文关键字:this 指针 中的 回调 C++      更新时间:2023-10-16

我在这里有一个C库,我想在C 类中包装。该库的工作不同步,需要设置错误处理程序。我知道如何将错误处理程序包裹在C库的静态类函数中,但是我习惯于使用void *user_data指针之类的东西,我可以将this放入静态thunk中调用成员函数。

有没有办法直接注册成员函数的回调,因为此库不具有指向某些UserData的指针?

您可以将其包装在自己的静态函数中,该功能知道某些要操作的全局(或静态局部)对象。您甚至可以将此功能作为静态方法,但如果需要,您就无法在不提供被称为对象的对象上调用一个方法。

编辑:考虑了一段时间后,也许有办法。您可以从本质上模拟线程 - 本地存储,并拥有由线程ID索引的整体集合的全局汇集。在每个线程结合的状态集合中,您可以保留呼叫对象的堆栈/队列(取决于如何处理数据)。回调可以查找存储的队列(因为回调知道其运行的线程ID)。这将使您强制一个单线读取框架在多个数据流上操作。