这是我的代码的简化版本:
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
}
Run Code Online (Sandbox Code Playgroud)
这只是一个简化的例子.我的代码是满的,其中两个功能都是一样的,除了一个地方<或>签名,或是否++或--应该被使用.
我的问题是:
有没有一种方法可以减少代码中的重复
我正在考虑使用指向运算符的指针(<或者>)作为模板参数.这不应该降低性能,因为指针将是编译时常量.是否有一些更好或通常使用的方式?
编辑:
所以我根据答案做的是实施:
template <typename TIterator, typename TComparison>
TIterator findExtremalPosition(TIterator begin, TIterator end,
TComparison comparison);
Run Code Online (Sandbox Code Playgroud)
然后打电话:
return findExtremalPosition(begin, end, std::less<double>());
Run Code Online (Sandbox Code Playgroud)
和
return findExtremalPosition(begin, end, std::greater<double>());
Run Code Online (Sandbox Code Playgroud)
我希望这就是你的意思.我想,经过一番挣扎类似的解决方案可以完成++和--运营商.
我会做,需要一个谓词和使用一般功能std::greater和std::less作为参数传递给函数在给定类型来实现findMaximalPosition和findMinimalPosition分别.