如何<更改>时优雅地避免重复代码?

Mar*_*dik 1 c++

这是我的代码的简化版本:

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)

这只是一个简化的例子.我的代码是满的,其中两个功能都是一样的,除了一个地方<>签名,或是否++--应该被使用.

我的问题是:

有没有一种方法可以减少代码中的重复

  1. 破坏可读性
  2. 降低性能?

我正在考虑使用指向运算符的指针(<或者>)作为模板参数.这不应该降低性能,因为指针将是编译时常量.是否有一些更好或通常使用的方式?

编辑:

所以我根据答案做的是实施:

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)

我希望这就是你的意思.我想,经过一番挣扎类似的解决方案可以完成++--运营商.

izo*_*ica 5

我会做,需要一个谓词和使用一般功能std::greaterstd::less作为参数传递给函数在给定类型来实现findMaximalPositionfindMinimalPosition分别.

  • 正确的解决方案.函数通常比函数指针更有效,因为它们是内联的. (2认同)
  • @MSalters对于像这样的简单事情,编译器应该能够使用指向函数的指针内联版本. (2认同)