无法将 'void (MyClass::*)()' 转换为 'void (*)()

Cannot convert 'void (MyClass::*)()' to 'void (*)()

我正在尝试 link 函数 void MainWindow::lowPower() 到 wiringPiISR(int, int, void (*)(void)。我的问题是出现以下错误:

cannot convert 'void (MyClass::*)()' to 'void (*)()

当我尝试以这种方式指向函数时:

void (MainWindow::*lowPower)(void);
wiringPiISR(4, INT_EDGE_BOTH, lowPower);

wiringPiISR 的语法是:

int wiringPiISR (int pin, int edgeType,  void (*function)(void))

我不能让 lowPower 静态,因为我需要调用一些对象

我该如何解决这个问题?

我找到了一个可能不是最好的解决方案,但有可能:

在 *.cpp 的开头:

Trigger trigger;
void interrupt()
{
    emit trigger.triggered();
}

触发器是一个非常简单的 class,只有一个 public 信号(已触发)。该信号在其默认构造函数中连接到 MainWindow class 中的 public 插槽,其中 wiringPiISR 也声明为:

wiringPiISR(0, INT_EDGE_BOTH, *interrupt);

我知道这不是完美的解决方案,因为它使用了函数指针,但我不想分别更改 wiringPi.h 的代码 wiringPi.c。