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