Tengo una clase llamada Writer
que tiene una función writeVector
como esta:
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";
}
}
Estoy tratando de no tener un código duplicado, sin dejar de preocuparme por el rendimiento. En la función, estoy haciendo la if (index)
verificación en cada ronda de mi for
bucle, aunque el resultado es siempre el mismo. Esto va en contra de "preocuparse por el rendimiento".
Podría evitarlo fácilmente colocando el cheque fuera de mi for
bucle. Sin embargo, obtendré un montón de código duplicado:
void Drawer::writeVector(...)
{
if (index) {
for (...) {
cout << i << "\t" << vec[i] << "\n";
}
}
else {
for (...) {
cout << vec[i] << "\n";
}
}
}
Así que estas son dos soluciones "malas" para mí. Lo que he estado pensando son dos funciones privadas, una de ellas sale del índice y luego llama a la otra. El otro solo supera el valor. Sin embargo, no puedo averiguar cómo usarlo con mi programa, todavía necesitaría el if
cheque para ver a cuál llamar ...
Según el problema, el polimorfismo parece una solución correcta. Pero no veo cómo debería usarlo aquí. ¿Cuál sería la forma preferida de resolver este tipo de problema?
Este no es un programa real, solo estoy interesado en aprender cómo se debe resolver este tipo de problema.