В моем приложении у меня есть следующая иерархия классов:
class Word
{
...
}
template <typename T> class Dictionary
{
...
};
class WordDictionary : public Dictionary<Word>
{
Q_OBJECT
...
}
Класс WordDictionary анализирует словарь, который занимает много времени. Я запускаю функцию синтаксического анализа из отдельного потока, и я хочу, чтобы она могла время от времени сигнализировать потоку GUI о предоставлении обновлений прогресса на основе текущего номера анализируемой строки. Вот почему я хочу, чтобы это был Q_OBJECT. Я попытался сделать базовый класс Dictionary Q_OBJECT, но получил сообщение о том, что шаблоны Q_OBJECT не поддерживаются. Когда я удалил макрос, оставив только WordDictionary как Q_OBJECT, я получил кучу сообщений об ошибках общего вида:
. \ GeneratedFiles \ Release \ moc_dictionary.cpp (44): ошибка C2039: «staticMetaObject»: не является членом «словаря»
с
[
Т = Слово
]
Есть ли что-нибудь, что я могу сделать, чтобы мой класс WordDictionary, производный от шаблона, представлял собой Q_OBJECT, кроме жесткого кодирования функций шаблона внутри него, производящих много стандартного кода?
edit: Изменение объявления шаблона на:
template <typename T> class Dictionary : public QObject
сделал код скомпилированным. Я не уверен, что я не делаю глупостей и если это будет работать правильно.