這裏是我的代碼的簡化版本:如何在<更改爲>時優雅地避免重複代碼?
template<typename TIterator>
TIterator findMaximalPosition(TIterator begin, TIterator end)
{
TIterator result(begin);
for (TIterator it = begin + 1; it != end; ++it)
{
if ((*it)->value > (*result)->value) // Here I just need to change to "<"
result = it; // to get a findMinimalPosition
}
return result;
}
template<typename TIterator>
TIterator findMinimalPosition(TIterator begin, TIterator end)
{
// almost the same
}
這只是一個簡單的例子。我的代碼充滿了兩個功能相同的地方,除了<
或>
符號或是否應使用++
或--
。
我的問題是:
有沒有一種方法,如何減少這種重複的代碼,而無需
- 銷燬可讀性
- 性能降低 ?
我正在考慮使用指向運算符的指針(<
或>
)作爲模板參數。這不應該降低性能,因爲指針是一個編譯時間常量。有一些更好的或通常使用的方法嗎?
編輯:
基於答案所以我所做的就是實現:
template <typename TIterator, typename TComparison>
TIterator findExtremalPosition(TIterator begin, TIterator end,
TComparison comparison);
,然後只要致電:
return findExtremalPosition(begin, end, std::less<double>());
和
return findExtremalPosition(begin, end, std::greater<double>());
我希望這是你的eant。我想,在經過一番努力之後,類似的解決方案可以爲++
和--
運營商完成。
請參閱['max_element'](http://en.cppreference.com/w/cpp/algorithm/max_element)。 – 2013-03-12 15:16:57
謝謝,但問題是我得到了這種情況很多,並且有些情況下標準算法不會完成這項工作。你是什麼意思的「==」? – 2013-03-12 15:18:31
@MartinDrozdik:...仍然請參閱'max_element'。即使你不能使用它,它也能解決問題。 – 2013-03-12 15:30:38