Tôi có một lớp được gọi là Writer
có chức năng writeVector
như vậy:
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";
}
}
Tôi đang cố gắng không có mã trùng lặp trong khi vẫn lo lắng về hiệu suất. Trong hàm này, tôi đang if (index)
kiểm tra mọi vòng for
-loop của mình , mặc dù kết quả luôn giống nhau. Điều này chống lại "lo lắng về hiệu suất".
Tôi có thể dễ dàng tránh điều này bằng cách đặt séc bên ngoài for
-loop của mình . Tuy nhiên, tôi sẽ nhận được vô số mã trùng lặp:
void Drawer::writeVector(...)
{
if (index) {
for (...) {
cout << i << "\t" << vec[i] << "\n";
}
}
else {
for (...) {
cout << vec[i] << "\n";
}
}
}
Vì vậy, đây là cả hai giải pháp "không tồi" đối với tôi. Những gì tôi đang nghĩ, là hai hàm riêng tư, một trong số chúng vượt quá chỉ mục và sau đó gọi hàm kia. Cái còn lại chỉ vượt quá giá trị. Tuy nhiên, tôi không thể tìm ra cách sử dụng nó với chương trình của mình, tôi vẫn cần if
kiểm tra xem nên gọi cái nào ...
Theo vấn đề, đa hình có vẻ là một giải pháp đúng. Nhưng tôi không thể thấy làm thế nào tôi nên sử dụng nó ở đây. Cách ưa thích để giải quyết loại vấn đề này là gì?
Đây không phải là một chương trình thực tế, tôi chỉ quan tâm đến việc tìm hiểu cách giải quyết loại vấn đề này.