假设我有以下玩具界面:
class iTest{
virtual ~iTest(void) = 0;
virtual void doA(void) = 0;
virtual void doB(void) = 0;
}
Q_DECLARE_INTERFACE(iTest, "somestring")
我想在两个类中实现它:Base 和 Derived。
class Base : public QObject, public iTest
{
Q_OBJECT
Q_PLUGIN_METADATA (IID "somestring")
Q_INTERFACES(iTEST)
explicit Base(QObject* parent=0);
void doA(void); // do common thing all derived need do
int data; // some data member all derived should have
}
class Derived: public Base
{
Q_OBJECT
Q_PLUGIN_METADATA (IID "somestring")
Q_INTERFACES(iTEST)
explicit Derived(QObject* parent = 0);
void doB(); // do something custom dervived objects need do
}
我错误的推理告诉我这应该有效。插件的抽象基类为接口的一部分提供功能,而派生类构成接口的其余部分。我可以通过一些明智的删除宏(基类元数据宏)来编译它。但是,生成的插件不会加载。所以我认为我的推理有问题,经验丰富的 Qt 开发人员或 c++ 开发人员可能会指出我看不到。