gpt4 book ai didi

c++ - 函数模板 : default type parameter

转载 作者:行者123 更新时间:2023-11-30 04:01:41 26 4
gpt4 key购买 nike

我正在完成 accelerated c++ 中的练习,目前正在研究有关泛型函数的章节。我遇到了一个我想编写的算法,我认为它需要给定迭代器的 value_type。我看到这篇文章 Default template arguments for function templates ,这很有帮助,但我想知道我的方法是否正确。如果确实如此,我不想养成坏习惯。

template <class ForwardIt, class BinaryOp = std::greater<std::iterator_traits<ForwardIt>::value_type> >

ForwardIt maxInRange(ForwardIt begin, ForwardIt end, BinaryOp op = BinaryOp()) {
// test here to reduce the loop count by 1

if (begin == end)
return begin;

ForwardIt largest = begin;

while (++begin != end)
if (op(*begin, *largest))
largest = begin;

return largest;
}

还有一个问题,抱歉。关于 BinaryOp 类型参数的语法是如何工作的?我不太明白如何像调用函数一样调用类型会产生类似替代的效果。谢谢你的时间。对此,我真的非常感激。

最佳答案

BinaryOp op = BinaryOp() 正在从默认构造的临时对象中复制初始化 BinaryOp 的实例。默认模板参数是 std::greater,它是 BinaryOp 的默认类型别名。在任何类类型上使用 () 都会导致构造函数调用。在此代码中,您将创建类型为 std::greater 的默认参数。

接下来,在您调用 op() 的地方,您实际上是在调用成员运算符 bool operator()(const value_type&, condt value_type&)。这允许 op 像函数对象一样工作。

关于c++ - 函数模板 : default type parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25615793/

26 4 0