函数模板是通用的函数描述,它们使用泛型来定义函数(所谓泛型简单点说就是不管传入参数的类型是什么都能得到想要的函数返回值)。

下面是一个函数模板的简单使用例子:

第一行里的typename也可以写class,即template<class T>

class主要是为了向前兼容,两种写法都可以。至于T是模板名,除了T之外可以起其他名字。

一、实例化

在代码中包含这个模板,并不代表它会生成函数定义(即使我写了它的具体实现代码),真实的情况是,编译器在调用该max函数,遇到具体类型的时候,才生成一个max的函数实例。(注意,模板和实例有区别)。比如我遇到了一个max(1,2,3),它就生成了一个int max(int t1,int t2,int t3);这个过程就叫作实例化,准确点说,叫隐式实例化。所以,显式实例化就是直接打出代码告诉编译器这个模板有这么个实例,具体语法就是在函数声明前面加一个template,再把T换为具体的类型。

就像第三行那样(Rectangle是我定义的结构体),需要注意的是,具体的数据类型必须与模板保持一致,也就是说,如果像下面这样就会报错:

而且,因为实例化只是告诉编译器在调用模板函数的时候有这么个实例,它所用的具体函数实现来源于模板函数,所以显式实例化只有定义,请不要写函数实现。

那么问题来了,为什么会有显示实例化?说实话以笔者现在的水平感觉没什么特别大的用...

二、具体化

显式具体化需要与实例化区分开。

还是以这个max函数为例,我们会发现,max函数的参数列表并不能支持所有的数据类型传入,比如指针就不能传入。为了解决这一点,就有了显示具体化的概念。语法如下例

注意与实例化语法不同的点在于template后有个<>。我们可以把显式具体化理解为——在实例化的基础上定义一种新的函数实现方式。这个具体化函数写好后,一旦编译器调用max函数时检测到其传入参数为结构体(此处是我定义的Rectangle结构体),就会自动执行这个具体化函数,而不会执行模板函数。所以,具体化是优先于常规模板。既然说到了优先项,顺便说一句,非模板函数,比如在程序里我定义的int max(int,int),这样的非模板函数是优先于具体化函数的,具体化又优先于常规模板。

三、模板重载

上面讲的具体化是针对参数列表不支持所有变量类型而设计的,虽然变量类型不能全部支持,但至少传入的参数个数是一样的,那么如果需要传入不同数量的参数呢?联想到函数的重载,自然就有模板的重载

注意在重载时要重新声明一遍template<typename T>

其他跟函数重载没什么差别,就不再赘述了。

#-----2022年3月30日-----#

C++函数模板及隐式实例化、显式实例化、显式具体化、模板重载相关推荐

  1. C++模板之隐式实例化、显示实例化、隐式调用、显示调用和模板特化详解

    模板的实例化指函数模板(类模板)生成模板函数(模板类)的过程.对于函数模板而言,模板实例化之后,会生成一个真正的函数.而类模板经过实例化之后,只是完成了类的定义,模板类的成员函数需要到调用时才会被初始 ...

  2. Vue3官网-可复用组合式API(十四)实例 property(\$slots,\$attrs)、渲染函数render(虚拟节点VNode,h() 参数,使用JavaScript代替模板功能),插件

    Vue3官网-可复用&组合式API(十四)实例 property($slots,$attrs).渲染函数render(虚拟节点VNode,h() 参数,使用JavaScript代替模板功能), ...

  3. 织梦网站调用变量失败_(自适应手机版)响应式精密机械模具类网站织梦模板 织梦仪器模具加工设备网站模板下载...

    模板名称:(自适应手机版)响应式精密机械模具类网站织梦模板 织梦仪器模具加工设备网站模板下载 本套织梦模板采用织梦最新内核开发的模板,这款模板使用范围广,不仅仅局限于一类型的企业,矿山钻机设备.矿机网 ...

  4. 各种风格404错误页面html模板源码30多套高大尚响应式网站模板html5网页静态模板Bootstrap扁平化网站源码css3手机seo自适响应。

    各种风格404错误页面html模板源码30多套高大尚响应式网站模板html5网页静态模板Bootstrap扁平化网站源码css3手机seo自适响应. 下载链接 各种风格404错误页面html模板源码3 ...

  5. 20套各种风格影视动画公司响应式企业模电影上映影讯网站模板电影软件网页CSS模板html5网页静态模板Bootstrap扁平化网站源码css3手机seo自适响应

    20套各种风格影视动画公司响应式企业模电影上映影讯网站模板电影软件网页CSS模板html5网页静态模板Bootstrap扁平化网站源码css3手机seo自适响应. 不仅仅是首页,二级页面,三级页面,登 ...

  6. html5博客在线写文章,HTML5响应式清新博客文章类织梦模板(移动端自适应)

    模板介绍 ★模板介绍★ HTML5响应式清新博客文章类织梦模板(移动端自适应),测试完整无错,兼容主流浏览器.模板包含安装说明,并包含测试数据.本模板基于DEDECms 5.7 UTF-8设计,需要G ...

  7. 织梦响应式精密机械模具类网站织梦模板(自适应手机端)

    介绍: 织梦响应式精密机械模具类网站织梦模板(自适应手机端)+PC+wap+利于SEO优化 织梦最新内核开发的模板,该模板属于企业通用.半导体.电子类企业都可使用, 这款模板使用范围极广,不仅仅局限于 ...

  8. 响应式NBA体育赛事资讯类织梦模板(自适应手机端)

    介绍: ★模板介绍★ 响应式NBA体育赛事资讯类织梦模板(自适应手机端),数据+评论+安装教程,资讯类网站适用,手机版同步PC站. 页面干净漂亮,网页宽度1200像素,纯手写DIV+CSS,易于优化, ...

  9. 【PHP】高端响应式自适应房屋出售建筑设计企业织梦模板

    高端房屋出售建筑设计企业织梦网站模板是一套设计风格简洁的房屋建筑类企业模板.页面设计相对比较独特,有些特别的设计, 特别是对房屋展示方面的东西做的很好.页面简洁大气,干净利落.很适合房屋出租,建筑设计 ...

  10. 响应式在线教育培训类网站织梦模板(自适应手机端)

    模板介绍: 在线教育培训类网站织梦模板(自适应),自适应网站结构,安装简单,优化快捷. dedecms响应式在线教育培训类网站织梦模板(自适应)(亲测可用) 运行环境:整站织梦程序采用PHP+MYSQ ...

最新文章

  1. 13.angular时间
  2. eos和以太坊有什么关系_以太坊 2.0是什么?
  3. 在Linux下gcc缺省编译,在Linux下GCC将文件合起来编译
  4. TLS与SSL之间关系——SSL已经被IEFT组织废弃,你可以简单认为TLS是SSL的加强版
  5. UIImageView动画
  6. php 获取对象中的元素个数组长度,获取php类中的数组长度
  7. Flutter布局锦囊---屏幕顶部提醒
  8. 洛谷——P2525 Uim的情人节礼物·其之壱
  9. Android Multimedia框架总结(十九)Camera2框架C/S模型之CameraService启动及与Client连接过程
  10. IOS网络编程常用的代码
  11. C语言库函数中的POW函数比自己写的简单幂算法慢多了!
  12. Chrome浏览器主页被篡改怎么修复
  13. 学术论文中的“重点与难点”怎么写?
  14. c语言1ms延时程序,请教老师,51微控制器在12M晶振,C语言程式设计时,延时函式120次=1ms(书本上是这样的,不懂),是怎样得来的?...
  15. SMMS:一个不错的免费图床
  16. Android界面美化的一点点积累
  17. ROS从入门到精通5-5:局部路径规划插件开发案例(以DWA算法为例)
  18. mysql闪电_闪电算法是什么?如何应对闪电算法?
  19. 加密文件的识别和破解工具,电子数据勘察取证实验室建设项目-掘密
  20. 蓝懿学习之tableView

热门文章

  1. uwp之图片旋转动画实现
  2. 盛诺基和信达生物达成临床研究合作
  3. UNITY_iOS_接入微信登录及分享微信
  4. [Azure - VM] 解决办法:无法通过SSH连接VM,解决错误:This service allows sftp connections only.
  5. 遥感影像反差增强、直方图均衡化
  6. VDI(Virtual Desktop Infrastructure)
  7. 搭建企业级数据治理体系指南
  8. 【精华】超详细的Win10安装步骤,菜鸟福音
  9. 你只是看起来很努力-阅读记录
  10. 高科技还是“智商税”?你怎么选