在一个我们打算用C++编写的项目中,我们使用了一个C库。这个C库提供了一些函数来注册回调函数,每次中断时都会调用它们。我们在构造函数中注册我们的回调函数。因此,我们基本上有以下(简化后的)结构:
OurClass::OurClass() {
//the registerISRCallback is the C function, that accepts as first parameter the pin,
//the interrupt is expected on and as second parameter a function pointer:
//void (*callbackFunction)(int number, int time)
registerISRCallback(SCLK, handle_interrupt);
}
void OurClass::handle_interrupt(int pin, int time) {
//example: Blink a Led on the instance-LedPin
}
然而,问题有两个:
- 因为它是一个成员函数,handle_interrupt方法的签名是
void (OurClass::*)(int, int)
,所以不能像这样使用。 - 该类可以实例化多次,因此使用单例也不起作用,因为我们的回调可能每个实例都不同(例如,每个实例可能具有不同的LedPin)。
有没有更多的解决方案可以在我们的类中使用这个C API函数,并保持代码整洁和易读?
extern "C"
函数,因此成员变量(静态或非静态)是行不通的。 - StoryTeller - Unslander Monicavoid*
,您可以传递一个指向类的指针,并使用静态成员函数进行回调。 - Richard Critten