Каков наиболее элегантный способ предоставить интерфейс в 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
}