У меня сейчас проблемы с динамическим полиморфизмом . У меня есть оператор switch, который будет выполнять различные задачи в зависимости от условия:
switch (condition)
{
case a:
foo();
doSomethingA();
case b:
foo();
doSomethingB();
case c:
foo();
doSomethingC();
}
Я хотел создать базовый объект с виртуальным методом, doSomething()
, и заставить эту функцию делать BasePtr->doSomething()
.
Мне нужно будет сделать соответствующий тип объекта в зависимости от этого условия, поэтому, насколько я знаю, я не смог избежать этого переключения.
Это будет только рефакторинг для:
std::unique_ptr<Base> base;
switch (condition)
{
case a:
base = std::make_unique<DerivedA>();
case b:
base = std::make_unique<DerivedB>();
case c:
base = std::make_unique<DerivedC>();
}
base->doSomething();
Это не похоже на полное решение. Этот оператор switch используется только один раз, и вся логика, в зависимости от условий, заканчивается позже. Это решение не будет сжимать дальнейшие операторы switch в базовый переключатель, который указывает, какой объект создать. Что вы думаете о такой проблеме?