En mi solicitud, tengo el siguiente jerarquía de clases:¿Es posible mezclar clases de C++ derivadas de plantilla con Q_OBJECT de Qt?
class Word
{
...
}
template <typename T> class Dictionary
{
...
};
class WordDictionary : public Dictionary<Word>
{
Q_OBJECT
...
}
La clase WordDictionary analiza un diccionario que lleva mucho tiempo. Estoy ejecutando la función de análisis dentro de un hilo separado y quiero que sea capaz de señalar el hilo de la GUI de vez en cuando para proporcionar actualizaciones de progreso basadas en el número de línea actual que se está analizando. Es por eso que quiero que sea un Q_OBJECT. Traté de hacer que el diccionario de la clase base fuera Q_OBJECT pero recibí un mensaje de que las plantillas Q_OBJECT no son compatibles. Cuando quité la macro, dejando sólo WordDictionary como Q_OBJECT, consigo un montón de mensajes de error de la forma general:
\ GeneratedFiles \ Release \ moc_dictionary.cpp (44):. Error C2039: 'staticMetaObject': no es un miembro de 'diccionario'
con
[
T = Palabra
]
¿hay algo que pueda hacer para que mi plantilla derivada de la clase WordDictionary un Q_OBJECT aparte de codificar las funciones de plantilla en de lado, produciendo un montón de código repetitivo?
edición: Cambio de la declaración de plantilla a:
template <typename T> class Dictionary : public QObject
hizo la compilación de código. No estoy seguro si no estoy haciendo algo estúpido y si esto funcionará correctamente, sin embargo.
[¿Por qué Qt no utiliza plantillas para las señales y las ranuras] (http://qt-project.org/doc/qt-4.8/templates.html) –