неск. имплементаций с разным типом члена данных и м-да
От: Аноним  
Дата: 09.06.08 15:53
Оценка:
здравствуйте.
был бы признателен если бы кто-нибудь натолкнул меня на идею о том, как имплементировать иерархию классов, имеющих единый интерфейс (скажем, 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.
как элегантно разрулить эту ситуацию?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.