次のおもちゃのインターフェースがあるとします。
class iTest{
virtual ~iTest(void) = 0;
virtual void doA(void) = 0;
virtual void doB(void) = 0;
}
Q_DECLARE_INTERFACE(iTest, "somestring")
これを Base と Derived の 2 つのクラスに実装したいと思います。
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++ 開発者が指摘できる、私には見えない何か問題があると思います。