Ho una classe chiamata Writer
che ha una funzione in questo writeVector
modo:
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";
}
}
Sto cercando di non avere un codice duplicato, pur continuando a preoccuparmi delle prestazioni. Nella funzione sto if (index)
controllando ogni round del mio for
loop, anche se il risultato è sempre lo stesso. Questo è contro "preoccuparsi per le prestazioni".
Potrei facilmente evitarlo posizionando il segno di spunta fuori dal mio for
loop. Tuttavia, riceverò un sacco di codice duplicato:
void Drawer::writeVector(...)
{
if (index) {
for (...) {
cout << i << "\t" << vec[i] << "\n";
}
}
else {
for (...) {
cout << vec[i] << "\n";
}
}
}
Quindi queste sono entrambe soluzioni "cattive" per me. Quello che stavo pensando, sono due funzioni private, una di loro supera l'indice e poi chiama l'altra. L'altro supera solo il valore. Tuttavia, non riesco a capire come usarlo con il mio programma, avrei comunque bisogno del if
controllo per vedere quale chiamare ...
Secondo il problema, il polimorfismo sembra una soluzione corretta. Ma non riesco a vedere come dovrei usarlo qui. Quale sarebbe il modo migliore per risolvere questo tipo di problema?
Questo non è un vero programma, mi interessa solo imparare come risolvere questo tipo di problema.