函数模板:默认类型参数
Function template: default type parameter
我正在完成加速c++中的练习,目前正在编写有关泛型函数的章节。我遇到了一个我想写的算法,我想它需要给定迭代器的value_type。我遇到了这个函数模板的后默认模板参数,这帮了我很多忙,但我想知道我的方法是否正确。如果真的是这样的话,我不想养成坏习惯。
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++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 如何解决一元"*"(有"字符")错误的无效类型参数?
- "std::shared_ptr":不是参数"_Ty"的有效模板类型参数
- 具有可变参数非类型参数的模板专用化
- 函数类型参数的模板参数推导
- PowerShell 使用结构类型参数调用 C++ DLL 的导出函数
- Visual Studio 2019 - 设置文件类型的默认扩展名
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- 使函数参数默认为周围范围
- 为模板传递非类型参数 agument
- 为什么带有类型参数的运算符 () 可以应用于 result_of 上下文中的类型?
- 使用其他模板类型参数作为要在函数签名中使用的类型别名声明
- 当“std::make_index_sequence”和“std::index_sequence”用于模板参数默认类型时
- 设置默认模板非类型参数,而不显式指定其余参数
- 如何将其他类型的默认参数传递给参数
- 模板模板参数默认可以引用其他模板类型的参数
- 函数模板:默认类型参数
- 内置类型的模板参数默认值
- 可变参数列表中有哪些类型的默认升级