我在这里有一个C库,我想在C ++类中包装。该库工作异步,需要设置错误处理程序。我知道如何在C库的静态类函数中包装错误处理程序,但我习惯于使用类似void *user_data
指针的东西,我可以将this
放入其中以调用成员函数静态的thunk。
有没有办法直接注册成员函数的回调,因为这个库没有指向某个userdata的指针?
答案 0 :(得分:0)
您可以将它包装在您自己的静态函数中,该函数知道它要操作的某个全局(或静态本地)对象。如果需要,您甚至可以将此函数设置为静态方法,但是您无法在不提供要调用它的对象上调用对象上的方法。
编辑:想了一会儿,也许还有办法。实际上,您可以通过拥有由线程ID索引的状态集合的全局集合来模拟线程本地存储。在每个线程绑定的状态集合中,您可以保留调用对象的堆栈/队列(取决于数据的处理方式)。回调可以查找存储的队列(因为回调知道它正在运行的线程ID)。这将允许您强制单线程框架对多个数据流进行操作。