这里是我的代码的简化版本:如何在<更改为>时优雅地避免重复代码?
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