В моем приложении используется следующая иерархия классов:
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): error C2039: 'staticMetaObject': не является член "Словаря"
с
[
T = Word
]
Могу ли я что-нибудь сделать, чтобы превратить мой класс WordDictionary, производный от шаблона, в класс Q_OBJECT, кроме жесткого кодирования функций шаблона внутри него, создавая много шаблонного кода?
edit: Изменение объявления шаблона на:
template <typename T> class Dictionary : public QObject
скомпилировали код. Я не уверен, что я не делаю глупостей, и все же это будет работать правильно.