Eu tenho uma classe chamada Writer
que tem uma função writeVector
assim:
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";
}
}
Estou tentando não ter um código duplicado, mas ainda me preocupo com o desempenho. Na função, estou fazendo a if (index)
verificação em cada rodada do meu for
-loop, embora o resultado seja sempre o mesmo. Isso é contra "se preocupar com o desempenho".
Eu poderia facilmente evitar isso colocando o cheque fora do meu for
-loop. No entanto, vou obter muitos códigos duplicados:
void Drawer::writeVector(...)
{
if (index) {
for (...) {
cout << i << "\t" << vec[i] << "\n";
}
}
else {
for (...) {
cout << vec[i] << "\n";
}
}
}
Portanto, essas duas soluções são "ruins" para mim. O que estive pensando são duas funções privadas, uma delas sai do índice e depois chama a outra. O outro apenas supera o valor. No entanto, não consigo descobrir como usá-lo com meu programa, ainda preciso if
verificar para ver qual chamar ...
De acordo com o problema, o polimorfismo parece a solução correta. Mas não consigo ver como devo usá-lo aqui. Qual seria a forma preferida de resolver esse tipo de problema?
Este não é um programa real, estou apenas interessado em aprender como esse tipo de problema deve ser resolvido.