我有某种对象工厂(基于模板),这对我的目的非常有用。但是现在我尝试使用派生自 QObject 和纯抽象类(接口)的类,并且我遇到了奇怪的运行时错误。
这里是这个类的简单图(Derived)
class Interface {
public:
Interface(){}
virtual ~Interface(){}
virtual int getResult() = 0;
};
class Derived : public QObject, public Interface {
Q_OBJECT
public:
explicit Derived(QObject *parent = 0);
int getResult();
};
及其在derived.cpp中的实现:
#include "derived.h"
Derived::Derived(QObject *parent)
: QObject(parent) {
}
int Derived::getResult() {
return 55;
}
当我尝试将 void 指针强制转换为接口时,我会得到意想不到的(对我而言)行为,它可能是运行时错误,或其他方法调用(它取决于类的大小)。
#include "derived.h"
void * create() {
return new Derived();
}
int main(int argc, char *argv[]) {
Interface * interface = reinterpret_cast<Interface *>(create());
int res = interface->getResult(); // Run-time error, or other method is called here
return 0;
}
你能解释一下为什么我不能将 void 指针转换为接口吗?有什么解决方法吗?
感谢您的回复