У меня есть определенный код, который я хочу оптимизировать.Это выглядит так:
function abc( string format ) {
if (format == "a") { // this is a string, I shouldn't have used single quote, sorry for the confusion
classx::a t;
doit(t);
}
if (format == "b"){
classx::b t;
doit(t);
}
if (format == "c"){
classx::c t;
doit(t)
}
if (format == "d"){
classx::d t;
doit(t);
}
}
В настоящее время существует множество функций doit () с различными типами
function doit( classx:a ) {
different code for a
}
function doit( classx:b ) {
different code for b
}
... и т. Д.
Как вы можете видеть,много кода копируется.Однако я не могу понять, как уменьшить слова.Обратите внимание: doit (x) перегружен другим типом.Класс a, b, c, d является производным от класса с именем «X».
Я могу создать указатель типа classx :: X:
classx::X *t;
if (format == "a") t = new classx::a
if (format == "b") t = new classx::b
if (format == "c") t = new classx::c
if (format == "d") t = new classx::d
doit(*t)
, но тогда все равно нужно написать doit () для типа classx :: X с кучей «если тогда»и приведение к правильному типу ... поскольку C ++ не может автоматически определять и приводить к правильному типу.
Интересно, есть ли более быстрый / умный способ сделать это.Заранее спасибо.