私のアプリケーションでは、次のクラス階層があります。
class Word
{
...
}
template <typename T> class Dictionary
{
...
};
class WordDictionary : public Dictionary<Word>
{
Q_OBJECT
...
}
WordDictionaryクラスは、時間がかかる辞書を解析します。別のスレッド内から解析機能を実行していますが、解析中の現在の行番号に基づいて進行状況の更新を提供するために、GUIスレッドに時々信号を送ることができるようにしたいと思います。そのため、Q_OBJECTにします。基本クラスのディクショナリをQ_OBJECTにしようとしましたが、Q_OBJECTテンプレートがサポートされていないというメッセージが表示されました。WordDictionaryのみをQ_OBJECTとして残してマクロを削除すると、一般的な形式のエラーメッセージが大量に表示されます。
。\GeneratedFiles\ Release \ moc_dictionary.cpp(44):エラーC2039:'staticMetaObject': [ T=Word ]の'Dictionary'
のメンバーではありません
テンプレートから派生したWordDictionaryクラスをQ_OBJECTにするために、その中にテンプレート関数をハードコーディングして大量の定型コードを生成する以外にできることはありますか?
編集:テンプレート宣言を次のように変更します:
template <typename T> class Dictionary : public QObject
コードをコンパイルしました。私が愚かなことをしていないかどうか、そしてこれが正しく機能するかどうかはわかりませんが。