当前位置: 首页 > news >正文

c++——模板初始识

1.函数模板

我们经常用到Swap函数交换两个值。由于需要交换的数据的类型不同,我们就需要写不同参数类型的同名函数,也就是函数重载:

然而这三个函数的逻辑是一样的,写这么多有些多此一举,通过函数模版可以写一个通用的交换函数。

---------------------------------------------------------------------------------------------------------------------------------

1.格式template<typename T1,typename T2,......typename Tn>

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

T1-Tn是函数的参数类型名(T可以用别的名字代替,只是我们习惯用T)

---------------------------------------------------------------------------------------------------------------------------------

2.用法

---------------------------------------------------------------------------------------------------------------------------------

3.原理

检测你传入的参数类型,隐式的帮你生成这一类型的函数重载。实际上仍然生成了多个函数,调用的时候也不是调用同一个函数,而是调用对应的函数重载,只不过编译器替你写了这些函数。(实际上,由于交换函数使用频繁,已经被纳入库中(swap),不需要我们去写)

---------------------------------------------------------------------------------------------------------------------------------

4.函数模版的显式实例化:

(1)有一种情况:

编译器不确定T是int还是double类型。

为了解决这个问题你可以这样:

但是你也可以这样:

这样直接指定了T类型而不用编译器推演,叫做函数模板的显式实例化(这种情况下,b会转换为int类型)

(2)但是,如果同一个模板参数只做返回值的话:

编译器不能根据推演返回值类型,所以必须模板实例化:

(3)如果有多个模板类型:

也可以同时指定T1,T2(返回值类型可以由T1决定(T1通过参数推演)。T1不是只做返回值,也就不是(3)的那种情况)

---------------------------------------------------------------------------------------------------------------------------------

2.类模板

类模板与函数模板不同的点在于,创建对象时一定要指定模板参数类型.

A<int>就相当于st1的类型

---------------------------------------------------------------------------------------------------------------------------------

类模板中的成员函数函数放在类外进行定义是这样的:
必须加上模板参数列表(template<class T>)
类型也要写成A<T>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • mysql内存和磁盘的关系
  • 数学建模——线性回归模型
  • Apache Doris 基础 -- 数据表设计(数据模型)
  • 充电器快充协议与PW6606快充电压诱骗芯片
  • Linux完整版命令大全(二十一)
  • 前端面试题12-22
  • 惯性测量单元M-G370系列广泛用于工业系统各个领域
  • 工控屏(触摸屏)怎么连接电脑
  • 首发AI新功能 贝锐向日葵远程控制IT精英版助力IT运维
  • Oracle dblink 发现Network 等待事件的分析 enq: KO - fast object checkpoint
  • 【权威出版】2024年电气工程与传感检测技术国际会议(EESDT 2024)
  • 从输入URL到页面加载的全过程
  • 书籍学习|基于SprinBoot+vue的书籍学习平台(源码+数据库+文档)
  • mysql存储地理信息的方法
  • jmeter之MD5加密接口请求教程
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 2017 年终总结 —— 在路上
  • CSS 专业技巧
  • Python_OOP
  • Redis 中的布隆过滤器
  • Shadow DOM 内部构造及如何构建独立组件
  • STAR法则
  • 猴子数据域名防封接口降低小说被封的风险
  • 记一次删除Git记录中的大文件的过程
  • 前端工程化(Gulp、Webpack)-webpack
  • 推荐一个React的管理后台框架
  • 协程
  • 智能合约开发环境搭建及Hello World合约
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 说说我为什么看好Spring Cloud Alibaba
  • 我们雇佣了一只大猴子...
  • $.ajax()参数及用法
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (六)vue-router+UI组件库
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • 、写入Shellcode到注册表上线
  • .naturalWidth 和naturalHeight属性,
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net core 管理用户机密
  • .Net Core 中间件验签
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET 中创建支持集合初始化器的类型
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .NET面试题(二)
  • .NET委托:一个关于C#的睡前故事
  • @Autowired多个相同类型bean装配问题
  • [ 第一章] JavaScript 简史
  • [4]CUDA中的向量计算与并行通信模式
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [AIGC] CompletableFuture的重要方法有哪些?
  • [C#]winform基于深度学习算法MVANet部署高精度二分类图像分割onnx模型高精度图像二值化
  • [C++][基础]1_变量、常量和基本类型