У меня есть родительский класс и несколько дочерних классов. Я хочу динамически создавать дочерние объекты разных классов в зависимости от ввода.
Предполагается, что родительский объект объявлен следующим образом:
class Parent {
public:
Parent(int v);
};
ChildOnE
и ChildTwo
оба наследуют Parent
, Есть ли ярлык для следующего:
shared_ptr<Parent> myObject;
switch(input) {
case 1: {
myObject = make_shared<ChildOne>(int v);
break;
}
case 2: {
myObject = make_shared<ChildTwo>(int v);
break;
}
}
Это довольно тяжело при работе с более чем двумя дочерними элементами, особенно когда конструкторы создаются одинаково. Разве мы не можем каким-то образом воспроизвести поведение чисто виртуального конструктора, чтобы все потомки могли его реализовать, а затем изменить только вызываемый класс, но не параметры?
TL; DR Как я могу сократить вышеупомянутый пример?