我想在 Qt 的另一个类中使用一个类的方法作为回调函数。这就是我想要做的:
Class A: public QObject
Q_OBJECT
public:
virtual void callBackFunc() = 0;
}
Class B: public A {
public:
B();
~B();
void callBackFunc() {
emit signal1();
}
}
Class C : public QObject {
Q_OBJECT
private:
A* m_b;
public:
C() {
m_b = new B();
}
~C();
void func() {
otherFunc(1,2,m_b->callBackFunc); // An API provided by an external library: otherFunc(int,int,void (*function)(void));
}
}
以上代码无法编译。它抛出以下错误:
cannot convert 'A::callBackFunc' from type 'void (A::)()' to type 'void (*)()
如何在 otherFunc() 中的类 C 的 func() 方法中调用 callBackFunc?
最佳答案
如果您的 API 使用 void (*function)(void)
, 你不能给它传递 void (*A::function)(void)
.
第一个是函数,第二个是类方法(需要使用对象)。此处只能使用静态类方法(类似于函数)。
或者,您可以使用全局静态变量来识别 callBackFunc
所在的对象必须被调用。 但是要非常小心(不能递归或从不同的线程调用 C::func
...)。
static B* objectToCallFuncOn = NULL;
void globalFunc()
{
assert( objectToCallFuncOn );
objectToCallFuncOn->callBackFunc();
}
void C::func()
{
objectToCallFuncOn = m_b;
otherFunc(1,2,&globalFunc);
objectToCallFuncOn = NULL;
}
关于c++ - 如何使用c++类的方法作为回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33784719/