I have a class called Writer
that has a function writeVector
like so:
void Drawer::writeVector(vector<T> vec, bool index=true)
{
for (unsigned int i = 0; i < vec.size(); i++) {
if (index) {
cout << i << "";
}
cout << vec[i] << "
";
}
}
I'm trying not to have a duplicate code, while still worrying about the performance.
In the function, I'm doing the if (index)
check on every round of my for
-loop, even though the result is always the same.
This is against "worrying about the performance".
I could easily avoid this by placing the check outside of my for
-loop.
However, I'll get loads of duplicate code:
void Drawer::writeVector(...)
{
if (index) {
for (...) {
cout << i << "" << vec[i] << "
";
}
}
else {
for (...) {
cout << vec[i] << "
";
}
}
}
So these are both "bad" solutions for me.
What I've been thinking, is two private functions, one of them outs the index and then calls the other.
The other one only outs the value.
However, I can't figure out how to use it with my program, I'd still need the if
check to see which one to call...
According to the problem, polymorphism seems like a correct solution. But I can't see how should I use it here. What would be the preferred way to solve this kind of problem?
This is not a real program, I'm just interested in learning how this kind of problem should be solved.
See Question&Answers more detail:os