这是我的代码的简化版本:
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>());
我希望这就是你的意思。++
我想经过一番苦苦挣扎后,可以为--
运营商完成类似的解决方案。