У мене є клас з ім'ям , 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
-loop, хоча результат завжди однаковий. Це проти "турбуватися про виступ".
Я легко міг цього уникнути, поставивши чек поза моїм- for
петлею. Однак я отримаю набір дублюючого коду:
void Drawer::writeVector(...)
{
if (index) {
for (...) {
cout << i << "\t" << vec[i] << "\n";
}
}
else {
for (...) {
cout << vec[i] << "\n";
}
}
}
Тож це обидва «погані» рішення для мене. Те, що я думав, це дві приватні функції, одна з них виводить з індексу, а потім викликає іншу. Інший лише випереджає значення. Однак я не можу розібратися, як ним користуватися зі своєю програмою, мені все одно потрібна if
перевірка, щоб побачити, до кого зателефонувати ...
Відповідно до проблеми, поліморфізм здається правильним рішенням. Але я не бачу, як мені тут користуватися. Який би кращий спосіб вирішити подібну проблему?
Це не реальна програма, мені просто цікаво дізнатися, як слід вирішувати подібну проблему.