I have two critical functions, such as:
insertExpensive(Holder* holder, Element* element, int index){
//............ do some complex thing 1
holder->ensureRange(index);//a little expensive
//............ do some complex thing 2
}
insertCheap(Holder* holder, Element* element, int index){
//............ do some complex thing 1
//............ do some complex thing 2
}
How to group 2 functions to improve serviceability?
My bad decisions:
Solution 1
insertExpensive(Holder* holder, Element* element, int index){
do1();
holder->ensureRange(index);//a little expensive
do2();
}
insertCheap(Holder* holder, Element* element, int index){
do1();
do2();
}
That would be ugly. It is also impractical if do2local variables from are required do1.
Solution 2
insert(Holder* holder, Element* element, int index, bool check){
//............ do some complex thing 1
if(check)holder->ensureRange(index);//a little expensive
//............ do some complex thing 2
}
It requires a conditional check for each call.
Solution 3. (draft)
template<bool check> insert(Holder* holder, Element* element, int index){
bar<check>();
}
template <>
inline void base_template<true>::bar() { holder->ensureRange(index); }
template <>
inline void base_template<false>::bar() { }
Overkill and unnecessary complexity?
Edit 1: The
priority criteria for how good the approach is sorted as follows: -
1. Better performance
2. Less duplicate code
3. Smaller overall line of code
4. Easier to read for experts and beginners
2: . mvidelgauz Wolf.