将C++成员函数映射到C回调

Pas*_*cal 2 c c++ callback

在C++项目中,我使用C库来访问某些硬件.C-Binding包括回调以通知某些输入引脚的更改.回调函数如下所示: void callback(char port, uint8_t interrupt_mask, uint8_t value_mask, void *user_data)

在我的实现中,我有一个SensorController类,它有一个应该接收回调的成员函数.成员函数看起来像这样void SensorController::pinChanged(char port, uint8_t interrupt_mask, uint8_t value_mask, void *user_data).

现在我想知道,为什么最简单的方法是避免使pinChanged函数静态以便能够将函数分配给回调?

Uni*_*ant 6

使用user_data指针返回指向拥有回调的类的指针.例如.

void MyCallback(char port, uint8_t interrupt_mask, uint8_t value_mask, void *user_data)
{
    static_cast<Example *>(user_data)->Callback(port, interrupt_mask, value_mask);
}

class Example
{
public:

    Example()
    {
        //setup callback here - i dont know what library you're using but you should be able to pass a this pointer as user_data
        init_lib(fictionalparameter1, fictionalparameter2, this);
    }

private:

     void   Callback(char port, uint8_t interrupt_mask, uint8_t value_mask)
     {
         //callback handler here...
     }

     friend void MyCallback(char port, uint8_t interrupt_mask, uint8_t value_mask, void *user_data);
};
Run Code Online (Sandbox Code Playgroud)