Лучший способ для производных классов переносить различные типы данных в C ++

Каков наиболее элегантный способ предоставить интерфейс в C ++, который принимает типы производных классов, которые несут с собой различные члены типов данных, которые затем необходимо получить позже.Пример ниже иллюстрирует это, когда класс Container предоставляет методы для «публикации» элемента, который будет своего рода производным вариантом BaseItem. Позже я хочу вернуть производный элемент и извлечь его значение.

Главное, что я хочу, - чтобы интерфейс контейнера (отправка и получение) оставался неизменным в будущем, позволяя определять и «передавать» через него различные производные типы «Предметов». Может, шаблон лучше для этого? Я бы предпочел не использовать RTTI. Может быть, на этот вопрос есть какой-то простой и элегантный ответ, но сейчас я изо всех сил пытаюсь его придумать.

class ItemBase {
  // common methods
};

class ItemInt : public ItemBase
{
  private:
    int dat;
  public:
    int get() { return dat; }  
};

class ItemDouble : public ItemBase
{
  private:
    double dat;
  public:
    double get() { return dat; }  
};

class Container {
 public:
   void post(int postHandle, ItemBase *e);      
   ItemBase* receive(int handle); // Returns the associated Item
};

int main()
{
   ItemInt *ii = new IntItem(5);
   Container c;
   c.post(1, ii);

   ItemInt *jj = c.receive(1); 
   int val = jj->get();  // want the value 5 out of the IntItem
}
5
задан innocent_bystander 4 January 2012 в 21:45
поделиться