Mam klasę o nazwie, Writer
która ma taką funkcję 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";
}
}
Staram się nie mieć duplikatu kodu, jednocześnie martwiąc się o wydajność. W funkcji if (index)
sprawdzam każdą rundę mojej for
-loop, mimo że wynik jest zawsze taki sam. To jest przeciwko „martwieniu się o wydajność”.
Mogę łatwo tego uniknąć, umieszczając czek poza my for
-loop. Jednak otrzymam mnóstwo zduplikowanego kodu:
void Drawer::writeVector(...)
{
if (index) {
for (...) {
cout << i << "\t" << vec[i] << "\n";
}
}
else {
for (...) {
cout << vec[i] << "\n";
}
}
}
Są to więc dla mnie „złe” rozwiązania. To, o czym myślałem, to dwie funkcje prywatne, jedna z nich wychodzi poza indeks, a następnie wywołuje drugą. Drugi tylko przekracza wartość. Jednak nie mogę dowiedzieć się, jak go używać z moim programem, nadal potrzebowałbym if
sprawdzenia, aby zobaczyć, do którego zadzwonić ...
Zgodnie z problemem polimorfizm wydaje się być właściwym rozwiązaniem. Ale nie widzę, jak mam go tutaj używać. Jaki byłby preferowany sposób rozwiązania tego rodzaju problemu?
To nie jest prawdziwy program, interesuje mnie tylko dowiedzieć się, jak rozwiązać tego rodzaju problem.