Можно ли смешивать классы C ++, производные от шаблона, с Q_OBJECT Qt?

В моем приложении используется следующая иерархия классов:

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

скомпилировали код. Я не уверен, что я не делаю глупостей, и все же это будет работать правильно.

11
задан Oktalist 12 September 2016 в 01:23
поделиться