[C++] -- 模板初阶
创始人
2024-05-24 00:03:28
0

文章目录

  • 函数模板
    • 函数模板的隐式实例化
    • 显式实例化
    • 模板参数的匹配原则
  • 类模板
  • 模板函数声明和定义分离会链接错误

函数模板

对于一些参数不同但功能类似的函数,C++有函数重载,但是函数重载有一些缺陷:

  1. 重载的函数只是参数不同,代码复用率低,只要有新的类型出现时,就需要用户添加新的函数。
  2. 代码的可维护性低,一个出错可能所有的函数都出错。

对于这个缺点,引入函数模板。
在这里插入图片描述
注意:typename是定义类模板的关键字,也可以是class,但是不能是struct。

函数模板在使用传参的时候也叫做函数模板的实例化,又分为隐式实例化和显式实例化。

函数模板的隐式实例化

隐式实例化:编译器根据实参推演函数参数的实际类型。在这里插入图片描述
在这里插入图片描述

显式实例化

在函数名后指明模板函数的参数类型。
在这里插入图片描述
原理就和在使用前进行强转一样,当然,当参数为引用时,也必须为const类型才接受强转。

模板函数不允许自动类型转换,普通函数可以自动类型转换。

模板参数的匹配原则

如果模板函数和同名的非模板函数都存在时,如果两个函数都符合要调用的时候传入的参数类型,优先调用非模板函数。

类模板

在这里插入图片描述在这里插入图片描述

模板函数声明和定义分离会链接错误

不管是模板函数,还是类模板中的函数,声明和定义在不同文件中,在声明的文件中使用会导致报错。原因是在类中有了函数的声明,但是函数定义在了其他文件中,此时其他文件中的模板函数并不是实际的函数,所以不会进符号表,后期在进行链接时会找不到该函数的地址而报错。

解决方法:

一. 显示实例化
在另一个文件中进行这样定义
在这里插入图片描述
但是这种方法有缺陷,就是只能针对一种类型,用其他的又要继续补,太麻烦!

二. 不分离声明和定义到两个文件中
也就是说直接将声明和定义都放在.h文件中,或者直接定义在类里面。

也有人会用.hpp文件,也就是说将.h和.cpp放在一起。

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...