Я пытаюсь создать функцию f, которая работает следующим образом:
StorageObject::addItem (const AbstractBase& base) {
AbstractBase* storage = new Derived1(base);
}
Однако я бы хотел, чтобы f работал с классами Derived2, Derived3 и т. Д. Есть ли способ заставить f вызвать правильный конструктор в зависимости от переданного ему конкретного подкласса AbstractBase, без использования кодов типов?
Чтобы поставить вопрос в контексте, я использую эту функцию для инициализации списка объектов в классе. Хотя я мог бы сделать что-то вроде
Derived1* temp = new Derived1();
storageobject.addItem(*temp);
delete temp;
Я бы предпочел сделать что-то вроде
storageobject.addItem(Derived1());
и все объекты хранилища обрабатывают все.