Есть базовый класс модуля устройства, к примеру CGenericModule.
#ifndef CGENERICMODULE_H
#define CGENERICMODULE_H
class CEC;
class QGenericModule;
class CGenericModule
{
protected:
CEC * fparentEC; //владелец
QGenericModule * fmodule; //связанный модуль на view
virtual void attachToGUIModule()=0;
virtual void detachFromGUIModule()=0;
public:
CGenericModule(CEC * ParentEC);
QGenericModule * module(){return fmodule;}
void setModule(QGenericModule * AModule);
virtual void update(){}
virtual void unlinkModule()=0;
};
#endif // CGENERICMODULE_H
От него наследуются несколько дочерних классов, как то - модуль базовый ввода/вывода (CIOModule), модуль питания (CPowerModule), модуль охлаждения (CCooler) и т.п.
В классе CGenericModule член
QGenericModule * fmodule;
хранит указатель на GUI объект, который отображается на сцене (иерархия GUI объектов похожа). Но в дочерних классах, мне нужно хранить fmodule уже типа GUI объекта (т.е. не QGenericModule, а QIOModule, QPowerModule, QCooler...).
Как можно добиться "виртуальности" члена fmodule, что бы в каждом классе он соотвествовал нужному типу (т.е. грубо перегрузить его тип). Раньше я делал так, в каждй дочерний класс добавлял новый приватный член уже нужного типа, а его значение приводил через dynamic_cast к нужному типу.
Является ли такой подход единственным? или задействовать шаблоны? хотя думаю могут возникнуть проблемы...