я был дан заряд реорганизовать старый код и наткнулся на этот случай:C++ выполнить действие для каждого типа в данном списке
void myClass::doStuff()
{
for(myIterator<Type1> it(this->getDatabase()); it; ++it)
{
do1(*it);
do2(*it);
do3(*it);
}
for(myIterator<Type2> it(this->getDatabase()); it; ++it)
{
do1(*it);
do2(*it);
do3(*it);
}
for(myIterator<Type3> it(this->getDatabase()); it; ++it)
{
do1(*it);
do2(*it);
do3(*it);
}
}
Это, очевидно, плохо, так как я копирую в основном тот же самый код в 3 раза поэтому я решил реорганизовать его, используя шаблоны, как это:
template<class _type> void myClass::do123()
{
for(myIterator<_type> it(this->getDatabase()); it; ++it)
{
do1(*it);
do2(*it);
do3(*it);
}
}
void myClass::doStuffBetter()
{
do123<Type1>();
do123<Type2>();
do123<Type3>();
}
есть ли другие более легкие/более продуктивные способы факторизовать такого рода повторения в коде?
Вопрос о бонусе: если мои типы не были статическими, но заданы в вариационном шаблоне, как бы я сделал подобное лечение?
Я не вижу никаких проблем с вашей функцией 'doStuffBetter'. Выглядит легко и доступно для меня. –
Учитывая, что у вас есть рабочий код, это может быть лучше подходит для [Code Review] (http: //codereview.stackexchange.com /) – lcs
@lcs может быть, но вторая часть вопроса не имеет никакого рабочего кода – Nyashes