私のアプリケーションでは、次のクラス階層があります。テンプレート由来のC++クラスとQtのQ_OBJECTを混在させることは可能ですか?
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': 'Dictionary'のメンバーではない
[
T = Word
]
テンプレート由来のWordDictionaryクラスをテンプレート関数のハードコード以外のQ_OBJECTにするためにできることはありますかそれの中で、定型コードをたくさん作り出していますか?
編集:テンプレート宣言を次のように変更します。
template <typename T> class Dictionary : public QObject
はコードをコンパイルしました。私は愚かな何かをしていない場合、これが正しく動作するかどうかはわかりません。
[信号とスロットにQtテンプレートを使用しないのはなぜですか] –