当前位置: 首页 > 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>
http://www.lryc.cn/news/355636.html

相关文章:

  • 帆软生成csv文件
  • 12.Redis之补充类型渐进式遍历
  • 品牌做电商控价的原因
  • 安全面试中的一个基础问题:你如何在数据库中存储密码?
  • 【python深度学习】——torch.min()
  • 华为校招机试 - 最久最少使用缓存(20240508)
  • 第三部分:领域驱动设计之分析模式和设计模式应用于模型
  • PID传感器在光电显示行业VOC气体检测的应用
  • iOS推送证书过期处理
  • 蓝海卓越计费管理系统 agent_setstate.php SQL注入漏洞复现
  • 【leetcode2765--最长交替子数组】
  • java文档管理系统的设计与实现源码(springboot+vue+mysql)
  • 西安航空学院电子工程学院领导莅临泰迪智能科技参观交流
  • C++|设计模式(二)|简单工厂和工厂方法模式
  • C语言从头学12——流程控制(一)
  • 10大领域应该怎么记?
  • 通过Ubuntu虚拟机+Linux移植LVGL并通过linux Frame buffer显示
  • M功能-支付平台(三)
  • 5G工厂长啥样
  • 使用Python操作Jenkins
  • 网络协议测试仪设计方案:474-便携式手提万兆网络协议测试仪
  • 使用numpy手写一个神经网络
  • 使用Spring AOP实现接口参数变更前后对比和日志记录
  • 免费无限换脸,火了,图片/视频/直播都行!
  • 无线领夹麦克风哪个品牌好?本期文章揭秘无线麦克风哪个品牌好用
  • 操作系统实验--终极逃课方法
  • C语言实现正弦信号扫频
  • 实用篇| huggingface网络不通
  • NLP与训练模型-GPT-3:探索人工智能语言生成的新纪元
  • iOS内购欺诈漏洞