gpt4 book ai didi

c++ - < 变为 > 时,如何优雅地避免代码重复?

转载 作者:行者123 更新时间:2023-11-30 00:53:51 28 4
gpt4 key购买 nike

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

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
}

这只是一个简化的例子。我的代码充满了两个函数相同的地方,除了 <。或 >签名或是否++--应该使用。

我的问题是:

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

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

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

编辑:

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

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>());

我希望这就是你的意思。我想在经过一些努力之后,可以为 ++ 完成类似的解决方案。和 --运营商。

最佳答案

我会创建一个通用函数,它接受一个谓词并使用 std::greaterstd::less 作为给定类型的函数的参数来实现 findMaximalPositionfindMinimalPosition 分别。

关于c++ - < 变为 > 时,如何优雅地避免代码重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15364980/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com