здравствуйте.
был бы признателен если бы кто-нибудь натолкнул меня на идею о том, как имплементировать иерархию классов, имеющих единый интерфейс (скажем, CBaseClass), но имеющих лишь одно различие по сути: тип хранимого значения, и тип метода по возвращению этого значения? единый интерфейс необходим для того, чтобы далее корректно работать с std::vector< CBaseClass *> и иметь тем самым возможность единой работы со всеми имплементациями класса CBaseClass.
т.е. хочется что-то в духе:
class CBaseClass{
public:
virtual ~CBaseClass(){};
private:
CBaseClass(){};
}
template < typename Type, std::string TypeName >
class CImpl : public CBaseClass{
public:
virtual ~CImpl(){}
std::string getType() const{
return _type;
}
Type getValue() const{
return _value;
}
protected:
std::string _name; //data's name in string representation
std::string _type; //data's type
Type _value; //data's value
};
но в данном случае получается замкнутый круг -- чтобы через CBaseClass иметь возможность обращаться к Type CImpl::getValue() const; нужно добавить в этот класс метод Type getValue() const; но тогда нужно знать чему равен Type, который мы задаем на стадии параметризирования шаблона объектов класса CImpl.
как элегантно разрулить эту ситуацию?