是否可以将 bind() *this 绑定到类成员函数以对 C API 进行回调

Iva*_*iev 4 c++ boost std

有没有办法使用 boost 或 std bind() 以便我可以在 C API 中使用结果作为回调?这是我使用的示例代码:

#include <boost/function.hpp>
#include <boost/bind/bind.hpp>

typedef void (*CallbackType)();

void CStyleFunction(CallbackType functionPointer)
{
    functionPointer();
}

class Class_w_callback
{
public:
    Class_w_callback()
    {
        //This would not work
    CStyleFunction(boost::bind(&Class_w_callback::Callback, this));
    }
    void Callback(){std::cout<<"I got here!\n";};
};
Run Code Online (Sandbox Code Playgroud)

谢谢!

jal*_*alf 5

不,没有办法做到这一点。问题在于,C 函数指针从根本上说无非是一个指令地址:“转到这个地址,然后执行找到的指令”。您想要带入函数的任何状态都必须是全局的,或者作为参数传递。

这就是为什么大多数 C 回调 API 都有一个“上下文”参数,通常是一个空指针,您可以传入该参数,并且仅用于允许您传入所需的数据。