C++简单模板介绍——template

news2024/12/23 12:06:45

一、泛型编程

概念:

在c语言中,同一种功能的函数,由于参数类型不同,虽然可以用函数重载,但可能需要重复多次的定义,又或者是不同类型的数据需要用到同一种数据结构时,需要定义大部分重复的类,因此,提出了模板去实现泛型编程,而泛型编程就是指编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。

二、函数模板

概念:

函数模板在定义时,只针对其功能进行设计,而不具体到某个具体数据类型,在使用时编译器会自动识别类型进行转换

格式:

template<typename T,typename S...>

typename是关键字,也可以用class代替,例子:

template<typename T> //此处的typename可以用class代替
void Swap( T& left, T& right)
{
 T temp = left;
 left = right;
 right = temp;
}

实例化:

隐式实例化:

由编译器去自动识别类型,在实例化时不给出具体类型,直接使用函数,若是类型无法匹配则会报错,而不会自动将部分进行类型转换。

显式实例化:

在函数后给出具体的类型,当参数类型与给出的类型不匹配时会自动转换成隐式匹配,由编译器去识别匹配,此时若还是无法匹配则直接报错,例如:

以下代码展示了如何实例化,而由于a,b类型不同,最终程序结果会报错

template<class T>
void swap(T& a,T& b)
{
    T tmp = a;
    a = b;
    b = tmp;
}


int main()
{
    int a;
    double b;
    swap(a,b);//隐式实例化
    swap<int>(a,b);//显示实例化
    return 0;
}

模板参数的匹配原则:

1.当显示实例化给定的类型不匹配时,会由编译器去根据模板定义自动识别匹配,若还是无法完全匹配则会报错

2.当既存在模板函数,又存在同名的函数,且其余条件也都相同时,会优先匹配到非模板函数,但如果参数存在歧义,模板函数能给出更好的匹配方案时,则会采用模板函数

3.模板函数中不会进行类型转换

三、类模板

概念:

类模板是针对多种类型参数需要用到同一种类进行数据管理或者其他操作时,避免重复定义,同样提出了模板的概念

格式:

template<class T1, class T2, ..., class Tn>
class 类模板名
{
 // 类内成员定义
}; 

队列、栈这些常见的数据结构,在定义中,比起以前用typedefine去宏观定义参数,用模板则可以直接定义,且在实例化时,可以实例化不同类型的参数,需要注意的是,类模板只能用显示实例化,而不能用隐式的(隐式存在歧义)

总结:

本篇内容讲了C++ 中的一个重要语法——模板,对一些比较基础的模板以及其用法进行了一个总结归纳。

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

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

相关文章

thrift的简单使用

写在前面 本文一起看下一种由facebook出品的rpc框架thrift。 源码 。 1&#xff1a;开发步骤 1:编写thrift idl文件 2&#xff1a;根据thrift idl文件生成java模板代码 3&#xff1a;继承模板代码的*.Iface接口给出server的具体服务实现 4&#xff1a;使用模板的HelloWorldSe…

计算机毕设 LSTM的预测算法 - 股票预测 天气预测 房价预测

文章目录 0 简介1 基于 Keras 用 LSTM 网络做时间序列预测2 长短记忆网络3 LSTM 网络结构和原理3.1 LSTM核心思想3.2 遗忘门3.3 输入门3.4 输出门 4 基于LSTM的天气预测4.1 数据集4.2 预测示例 5 基于LSTM的股票价格预测5.1 数据集5.2 实现代码 6 lstm 预测航空旅客数目数据集预…

软件测试中最坏与一般健壮性测试用例区别

我们看下面一个问题 1.如果有一个n变量函数&#xff0c;健壮最坏情况测试会产生多少个测试用例 2.如果有一个n变量函数的被测程序&#xff0c;健壮性测试会产生多少个测试用例 首先我们知道一个变量的健壮测试有七个测试用例 即下图所示 1.问题一答案&#xff1a; 总的测试…

计算机竞赛 深度学习 python opencv 火焰检测识别

文章目录 0 前言1 基于YOLO的火焰检测与识别2 课题背景3 卷积神经网络3.1 卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV54.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 数据集准备5.1 数…

TCP/IP客户端和服务器端建立通信过程

客户端和服务器端建立通信过程 客户端 connectToHost(const QString &, quint16 , QIODevice::OpenMode , QAbstractSocket::NetworkLayerProtocol )服务器端

Jmeter接口测试学习

1、设置CSV数据文件时&#xff0c;线程数设置为2或者多个&#xff0c;可以读取多行登录用户信息 2、循环&#xff0c;线程多次登录 3、http接口登录配置 4、CSV数据文件配置 数据文件&#xff1a; 5、如果需要鉴权(authorization)&#xff0c;如postman 下Basic Auth,可以设…

第一章:最新版零基础学习 PYTHON 教程(第三节 - 下载并安装Python最新版本)

在这里&#xff0c;我们将讨论如何获得与在 Windows/Linux/mac OS 上安装 Python 相关的所有问题的答案。Python由Guido van Rossum于20世纪90年代初开发&#xff0c;最新版本为3.11&#xff0c;我们可以简称为Python3。 如何下载并安装Python&#xff1f; 要了解如何安装 P…

【保姆级】WebSocket是什么有什么用

WebSocket WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输。 HTTP协议和WebSocket协议对比&#xff1a; HTTP是短连接 WebSo…

SpringCloud OpenFeign--声明式WebService 客户端

&#x1f600;前言 本篇博文是关于SpringCloud OpenFeign的基本介绍&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动…

排序算法—

1 1.冒泡排序&#xff08;相邻两两比较&#xff09; 理解&#xff1a;进行n轮循环&#xff0c;相邻元素两两比较&#xff0c;交换位置 先将最大/最小元素放到最后一个位置 然后缩小j的比较范围&#xff0c;因为每一轮循环最后一个元素的位置都已经确定了 #include <stdio.h&…

Ubuntu 图形界面查看Mysql 数据库内容

1.安装mysql workbench 打开ubuntu软件中心&#xff0c;搜索如下字符&#xff0c;安装这个社区版的workbench 2.登录workbench 按下图依次打开该安装后的软件 点击此处进行登录&#xff0c;首次登录可能需要密码&#xff0c;第二次如果记住密码了就不需要了。 3.查看数据库的…

Python程序设计实例 | 学生管理数据库系统的开发

本文将通过一个学生管理数据库系统的开发过程来展示如何系统地基于Python实现SQLite数据库编程。以下首先提出数据库系统的基本结构&#xff0c;以及如何通过SQLite逐步达到这些要求并进行常规操作。 01、数据表结构 该学生管理数据库系统包括4张表&#xff1a; 专业表、学生…

华为数通方向HCIP-DataCom H12-821题库(单选题:361-380)

第361题 如图所示是一台路由器的BGP输出信息。那么以下关于这段信息的描述,错误的是哪一项? <Huawei>display bgp error Error Type: Peer Error Peer Address:10.1.1.2 VRFName:Public Error Info: Router-ID conflictA、该路由器邻居地址是10.1.1.2 B、Error Type显…

SWC 流程

一个arxml 存储SWC &#xff08;可以存多个&#xff0c;也可以一个arxml存一个SWC&#xff09;一个arxml 存储 composition &#xff08;只能存一个&#xff09;一个arxml 存储 system description (通过import dbc自动生成system) 存储SWC和composition的arxml文件分开&#…

Python基础指令(上)

Python基础指令上 常量和表达式变量和类型1. 什么是变量2. 变量的语法2.1 定义变量2.2 使用变量 3. 变量的类型4. 为什么要有这么多类型5. 动态类型特性 注释输入输出1. 程序与用户的交互2. 通过控制台输出3. 通过控制台输入 运算符1. 算术运算符2. 关系运算符3. 逻辑运算符4. …

科学家首次为地球“全面体检”;国产光刻机或系误传;推特或将按月收费丨RTE开发者日报 Vol.52

开发者朋友们大家好&#xff1a; 这里是「RTE 开发者日报」&#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

nginx(CVE-2022-41741和41742) 漏洞修复

一、漏洞描述 近期Nginx安全发布几个中高危漏洞&#xff1a;CVE-2022-41741 (Memory Corruption) – CVSS score 7.1 (High)、CVE-2022-41742 (Memory Disclosure) – CVSS score 7.0 (High)&#xff0c;上述是&#xff1a;MP4 流媒体模块&#xff08;ngx_http_mp4_module&…

固定资产管理系统有哪些基本功能

固定资产管理系统是一种用于管理和跟踪企业固定资产的软件。它能够帮助企业实现固定资产的全生命周期管理&#xff0c;包括资产采购、仓储、申请、维护、损坏等环节。以下是固定资产管理系统的一些基本功能&#xff1a;资产信息管理&#xff1a;系统可记录公司固定资产信息&…

「聊设计模式」之桥接模式(Bridge)

&#x1f3c6;本文收录于《聊设计模式》专栏&#xff0c;专门攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎持续关注&&收藏&&订阅&#xff01; 前言 设计模式是程序员不可或缺的一部分。它们提供了一种通用的…

华为数通方向HCIP-DataCom H12-831题库(单选题:61-80)

第61题 R3与R4的IS-IS Leve1-1邻居没有建立,根据本图的信息可能的原因是? A、R3与R4的互连接口circuit-type不四配 B、R3与R4的区域号不同 C、R3与R4的IS-Leve1不匹配 D、R3与R1的IIH认证失败 答案:B 解析: 直接看图中的非0数字就能得出答案。 Display isis error 是查看…