【C++】仿函数在模板中的应用——【默认模板实参】详解(n)
2023-12-16 01:19:26
前言
大家好吖,欢迎来到 YY 滴C++系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!
一.引入:查看(容器)文档时常常遇到的场景
- 我们在
https://cplusplus.com/reference/forward_list/forward_list/
查看类模板时,常常会看到这些东西,如下图所示的都分别是什么意思呢?- 其实我们在学习函数参数时也知道默认实参,但在类模板中遇到这种往往犯迷糊;我们直接给出结论:
allocator<T>
是一个仿函数默认模板实参
二.默认模板实参详解(含代码演示)
前置知识:
- 仿函数:把一个类用()重载(类中实现一个operator()),让其能够实现函数的功能
- 我们可以举一个例子:我们重写 compare,默认使用标准库的 less 函数对象模板
// compare 有一个默认模板实参less<T>和一个跌认函数实参F0)
template <typename T,typename F=less<T>>
int compare(const T &vl, const T &v2,F f= F())
{
if (f(vl,v2)) return -1;//使用时,用f()————它是一个仿函数,
if (f(v2,vl)) return l;
return0:
}
分析这段代码:
- 我们为此模板参数提供了默认模板实参
less<T>
并为其对应的函数参数也提供了默认实参T
- 默认模板实参指出:compare 将使用标准库的
less 函数对象类(即仿函数)
,它是使用与 compare一的类型参数实例化的- 默认函数实参指出
f
将是类型E的一个默认初始化的对象- 当用户调用这个版本的 compare 时,可以提供自己的比较操作,但这并不是必需的
- 与函数默认实参一样,对于一个模板参数,只有当它右侧的所有参数都有默认实参时,它才可以有默认实参。
文章来源:https://blog.csdn.net/YYDsis/article/details/134889444
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!