C&C++中的模板是泛型编程的基础

泛型编程是一种编程风格,其中算法以尽可能抽象的方式编写,而不依赖于将在其上执行这些算法的数据形式。算法与数据形式分离。

C++中模板分为两种,一种是模板函数,一种是模板类。

使用模板参数构建出的函数就是模板函数,使用模板参数构建出的类就是模板类。

(所以可以看出重要的地方是模板参数)

在写了一个模板函数之后,编译时,编译器会根据用户给出的模板参数的实例化来自动生成相应的函数(类模板同理

模板的使用体现了C++程序的复用性和多态性

(函数重载也体现了多态性,但是函数重载是比较有限的,能覆盖的不同参数是有限的)

多态性:静态多态(模板)(编译时多态),动态多态(继承)(运行时多态)

==模板参数分为三类==
  1. 类型参数

通过 关键字 typename 或者 class 引入(两者基本上是等价的)

  1. 非类型参数

模板参数不局限于类型,类型的值也可以作为模板参数,通过 关键字 值的类型 引入

目前C++只支持 整形 / 枚举类型 / 指针类型(可以是原始数据类型的指针、派生数据类型的指针、对象的指针、对象的成员的指针) / 引用类型(可以是原始数据类型的引用、派生数据类型的引用、对象的引用)

  1. 模板型模板参数
==模板参数支持缺省==

但是要注意的是,缺省参数的使用不要忘了按照规范形式,比如在类或函数声明时加了缺省值,在实现时就不要加了

(缺省值在声明时添加,在实现时就不添加了)

还有,缺省要从右往左缺省

截屏2022-12-03 10.14.22

image-20221202104949903

https://blog.csdn.net/zhizhengguan/article/details/115869685