【C++初阶】:模板进阶

news2024/11/29 21:37:35

模板进阶

  • 一.非类型模板参数
  • 二.模板的特化
    • 1.概念
    • 2.函数模板特化
    • 3.类的特化
      • 1.全特化
      • 2.偏特化
  • 三.模板的分离编译

一.非类型模板参数

模板参数分类类型形参与非类型形参。
类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。
非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用

一个例子

在这里插入图片描述

这里的T就是类型模板参数,N就是非类型模板参数。

在这里插入图片描述

二.模板的特化

1.概念

通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果,需要特殊处理。例如下面一个比较函数。

在这里插入图片描述

此时,就需要对模板进行特化。即:在原模板类的基础上,针对特殊类型所进行特殊化的实现方式。模板特化中分为函数模板特化与类模板特化。

2.函数模板特化

函数模板的特化步骤:
1. 必须要先有一个基础的函数模板
2. 关键字template后面接一对空的尖括号<>
3. 函数名后跟一对尖括号,尖括号中指定需要特化的类型
4. 函数形参表: 必须要和模板函数的基础参数类型完全相同,如果不同编译器可能会报一些奇怪的错误。

在这里插入图片描述

3.类的特化

类的特化有两种,全特化和偏特化。

1.全特化

全特化即是将模板参数列表中所有的参数都确定化。

在这里插入图片描述

在这里插入图片描述

2.偏特化

部分特化

将模板参数类表中的一部分参数特化

在这里插入图片描述

参数更进一步的限制

偏特化并不仅仅是指特化部分参数,而是针对模板参数更进一步的条件限制所设计出来的一个特化版本

在这里插入图片描述

三.模板的分离编译

一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链
接起来形成单一的可执行文件的过程称为分离编译模式。

假如有以下场景,模板的声明与定义分离开,在头文件中进行声明,源文件中完成定义:

在test.h里声明。

在这里插入图片描述

在test.cpp里定义。

在这里插入图片描述

在mian.cpp里调用

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

也就是在使用模板时,编译器不知道具体类型,所以无法形成有效地址,最终在链接时无法找到地址。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/792755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Play 资产分发(Play Asset Delivery)

一、前言 Google Play发布应用&#xff0c;只支持上传aab格式文件。在之前&#xff0c;Google Play对上传apk文件限制大小不超过150MB&#xff0c;对于新的aab格式文件&#xff0c;也要求生成的目标apk不超过150MB&#xff08;GooglePlay后台使用bundletool生成apk文件&#xf…

虚拟机网络桥接,详细操作步骤,本地连接虚拟机

虚拟机网络桥接 文章目录 虚拟机网络桥接一&#xff0c;首先查看主机连接网络的网关二、打开虚拟机的worksation服务三、修改主机的VMnet8的IPV4属性四、修改虚拟机的workstation的虚拟网络五、修改VMnet8的IP,网关六、把虚拟机设置为桥接模式七、修改虚拟机的静态ip和对应的网…

JAVA面试总结-Redis篇章(三)——缓存雪崩

JAVA面试总结-Redis篇章&#xff08;三&#xff09;——缓存雪崩

测试开发之系统篇 - 常用系统命令

目录 前言&#xff1a; 查看占用端口的进程 Linux Windows 杀死进程 Linux Windows 按名称查看进程 命令行管道 后台运行服务 修改文件 Linux Mac 复制目录到远程 实时查看文件内容 查看正在运行的服务 查看服务状态 重启服务 查看内存状况 查看磁盘状况 …

基于MAXENT模型的生物多样性生境模拟与保护优先区甄选、自然保护区布局优化及未来气候变化下评估及论文写作教程

详情点击链接&#xff1a;基于MAXENT模型的生物多样性生境模拟与保护优先区甄选、自然保护区布局优化及未来气候变化下评估中的应用及论文写作 一&#xff1a;生物多样性保护格局与自然保护区格局优化 1.我国生物多样性格局与分布&#xff1b; 2.我国自然保护区格局与分布&…

前端年度工作述职报告优秀

前端年度工作述职报告优秀篇1 尊敬的各位领导、各位同仁&#xff1a; 大家好!按照20__年度我公司就职人员工作评估的安排和要求&#xff0c;我认真剖析、总结了自己的工作情况&#xff0c;现将本人工作开展情况向各位领导、同仁做以汇报&#xff0c;有不妥之处&#xff0c;希…

注册外部的AudioPolicy,监听焦点变化

开始 AudioFocus分发流程 在上面分发流程分析中&#xff0c;最终是在MediaFocusControl中进行处理的&#xff0c;在requestAudioFocus​方法中可以看到在执行焦点栈逻辑时会先执行AudioPolicy相关逻辑&#xff0c; 因此我们试一试可不可以利用这一点&#xff0c;来注册外部的…

用于开漏模式和推拉模式的 4bit 双向电平转换器MS4554N/MS4554N1

MS4554N/MS4554N1 是一款双向电平转换器&#xff0c;可以应用在 混合电压的数字信号系统。其使用两个独立构架的电源供电&#xff0c; A 端供电电压范围是 1.65V 到 5.5V &#xff0c; B 端供电电压范围是 2.3V 到 5.5V 。可用在电源电压为 1.8V 、 2.5V 、 3.3V 和…

FPGA学习——按键消抖的两种实现方法

文章目录 一、按键消抖简介1.1、为什么要按键消抖 二、C4开发板原理图三、按键消抖源码3.1、方案一&#xff08;每当检测到下降沿便开始重新计数&#xff09;3.2、方案二&#xff08;检测到第一次下降沿后便开始计数&#xff09; 四、仿真代码及仿真波形图五、拓展&#xff1a;…

【金万维】使用天联高级版登录用友U8,文件输出操作。

【操作步骤】 1、通过天高客户端登录U8后&#xff0c;打开对应的报表或者列表&#xff08;以余额表为例&#xff09;。 2、点击“输出”按钮后&#xff0c;弹出“另存为”窗口&#xff0c; 注意&#xff1a;当前“保存在&#xff1a;桌面”这个路径为服务器的桌面&#xff0c;…

matlab 读取fig中的数据

1.使用命令打开fig open(文件名.fig) 2.查看图像包含的数据和属性 Location是原始的&#xff0c;Normal 可能是调整了顺序后的。

echarts制作多个纵轴的折线图

代码 <script type"text/javascript"> $(function (){var myChart echarts.init(document.getElementById(main));option {color: ["#9bbb59","#0B438B","#4141F1","#F81945","#4bacc6","#F89E19&q…

怎么把知识问答做成二维码?分享简单的二维码制作工具

现在无论是工厂的职工还是学校的学生&#xff0c;都会有各种各样的知识问答。传统的纸质知识问答&#xff0c;不仅浪费人力物力&#xff0c;还需要占用上班或是上学的时间来完成。为了方便大家使用&#xff0c;我们可以把知识问答做成二维码图片&#xff0c;随时随地手机扫一扫…

【代码随想录day20】二叉搜索树中的搜索

题目 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 null 。 示例 1: 思路 因为这里是二叉排序树&#xff0c;所以不用爆搜所有节点…

RTOS 低功耗设计原理及实现

RTOS 低功耗设计原理及实现 文章目录 RTOS 低功耗设计原理及实现&#x1f468;‍&#x1f3eb;前言&#x1f468;‍&#x1f52c;Tickless Idle Mode 的原理及实现&#x1f468;‍&#x1f680;Tickless Idle Mode 的软件设计原理&#x1f468;‍&#x1f4bb;Tickless Idle Mo…

超过443万人次观看|央媒聚焦全球吉商大会,实在智能携国产大模型TARS出席

据吉林新闻联播近期报道&#xff0c;第八届全球吉商大会、第二届吉林省校友人才促进吉林振兴发展大会在长春开幕。省委书记景俊海出席开幕式并讲话。省委副书记、省长胡玉亭主持开幕式。省政协主席朱国贤为“吉商突出贡献人物”颁奖。全国工商联副主席汪鸿雁致辞。开幕式全程进…

3.2.20:DTP与Datepicker实现日期的输入

【分享成果&#xff0c;随喜正能量】人生艰难自不必去回避&#xff0c;人生艰难说多了也是白说&#xff0c;为什么&#xff0c;解决不了问题&#xff0c;说了也还是那么难。。 我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高…

PostgreSQL——sql文件导入

Windows方式&#xff1a; 进入PostgreSQL安装目录的bin&#xff0c;进入cmd 执行命令&#xff1a; psql -d 数据库名 -h localhost -p 5432 -U 用户名 -f 文件目录 SQL Shell: 执行命令&#xff1a; \i 文件目录(Windows下要加引号和双斜线)

第五章 聚合函数与内置函数

第五章 聚合函数与内置函数 一、聚合函数1、常用聚合函数2、示例&#xff08;1&#xff09;count&#xff08;2&#xff09;sum&#xff08;3&#xff09;avg&#xff08;4&#xff09;max&#xff08;5&#xff09;min 二、内置函数1、日期函数&#xff08;1&#xff09;总览&…

【Java基础学习打卡18】运算符(上)

目录 前言一、运算符和表达式1.运算符2.表达式 二、算术运算符1.加法运算符2.减法运算符3.乘法运算符4.除法运算符5.取余运算符6.表达式类型自动提升 总结 前言 本文主要介绍运算符和表达式&#xff0c;及运算符中的算术运算符。在 Java 编程中&#xff0c;运算符起着非常重要…