前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++】仿函数在模板中的应用——【默认模板实参】详解(n)

【C++】仿函数在模板中的应用——【默认模板实参】详解(n)

作者头像
YY的秘密代码小屋
发布2024-01-23 09:20:29
810
发布2024-01-23 09:20:29
举报
文章被收录于专栏:C++系列C++系列
在这里插入图片描述
在这里插入图片描述

一.引入:查看(容器)文档时常常遇到的场景

  • 我们在https://cplusplus.com/reference/forward_list/forward_list/查看类模板时,常常会看到这些东西,如下图所示的都分别是什么意思呢?
  • 其实我们在学习函数参数时也知道默认实参,但在类模板中遇到这种往往犯迷糊;我们直接给出结论:allocator<T>是一个仿函数默认模板实参
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二.默认模板实参详解(含代码演示)

前置知识:

  • 仿函数:把一个类用()重载(类中实现一个operator()),让其能够实现函数的功能
  • 我们可以举一个例子:我们重写 compare,默认使用标准库的 less 函数对象模板
代码语言:javascript
复制
// 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:
}

分析这段代码:

  1. 我们为此模板参数提供了默认模板实参less<T>并为其对应的函数参数也提供了默认实参T
  2. 默认模板实参指出:compare 将使用标准库的 less 函数对象类(即仿函数),它是使用与 compare一的类型参数实例化的
  3. 默认函数实参指出f将是类型E的一个默认初始化的对象
  4. 当用户调用这个版本的 compare 时,可以提供自己的比较操作,但这并不是必需的
  5. 与函数默认实参一样,对于一个模板参数,只有当它右侧的所有参数都有默认实参时,它才可以有默认实参。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.引入:查看(容器)文档时常常遇到的场景
  • 二.默认模板实参详解(含代码演示)
  • 前置知识:
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档