У меня есть класс Writer
с такой функцией writeVector
:
void Drawer::writeVector(vector<T> vec, bool index=true)
{
for (unsigned int i = 0; i < vec.size(); i++) {
if (index) {
cout << i << "\t";
}
cout << vec[i] << "\n";
}
}
Я стараюсь не дублировать код, но при этом беспокоюсь о производительности. В этой функции я if (index)
проверяю каждый раунд своего for
цикла, хотя результат всегда один и тот же. Это против того, чтобы «беспокоиться о производительности».
Я мог бы легко избежать этого, разместив проверку за пределами моего for
цикла. Однако я получу кучу повторяющегося кода:
void Drawer::writeVector(...)
{
if (index) {
for (...) {
cout << i << "\t" << vec[i] << "\n";
}
}
else {
for (...) {
cout << vec[i] << "\n";
}
}
}
Так что для меня это оба «плохих» решения. Я думал о двух частных функциях, одна из которых выходит за пределы индекса, а затем вызывает другую. Другой только превосходит ценность. Однако я не могу понять, как использовать его с моей программой, мне все равно нужна if
проверка, чтобы узнать, какую из них вызывать ...
Согласно проблеме, полиморфизм кажется правильным решением. Но я не понимаю, как мне его здесь использовать. Каким будет предпочтительный способ решения такой проблемы?
Это не настоящая программа, мне просто интересно узнать, как следует решать такого рода проблемы.