在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函数静态以便能够将函数分配给回调?
使用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)