Я недавно начал работать над устаревшим проектом.Я мог видеть много дублирования кода в формате ниже:
void somefunc(arg1,arg2,Type1 * Ptr)
{
//some logic
}
// перегружен на Type2
void somefunc(arg1,arg2,Type2 * Ptr)
{
//same logic
}
Единственная разница между этими двумя функциями - тип третьего аргумента . Тип1 и Тип2 являются производными от Тип .
Тип определяется во время выполнения.Итак, я попробовал что-то вроде этого
void somefunc(arg1,arg2,Type * Ptr)
{
if (arg1.version > 14)
Type1 *ptr = dynamic_cast<Type1*>(Ptr);
else
Type2 *ptr = dynamic_cast<Type2*>(Ptr);
//some logic using ptr
}
Но для определения правильного типа во время выполнения требуется dynamic_cast.И я должен обновить код во многих местах с помощью блоков if else.
Вариант Thought of Boost.Это похоже на описанный выше подход.
Есть ли более простой / элегантный способ избежать такого рода дублирования кода?