目录
〇、为什么需要模板?
如何实现一个所有类型可用的交换函数呢?函数重载的出现仅仅是解决了命名问题,但我们还是要为每种类型的变量都写一个同名函数,还是有点麻烦。能不能把参数的类型设置为一个变量?然后在使用函数时同时传入参数类型和实参,这样无论有多少种类型的参数,我们都只需要写一个这样的模板函数。
”把参数类型设置为变量“。基于这样的思想,c++引入了模板:将参数类型设置为变量,从而可以创建能够处理多种数据类型的代码。这也是泛型编程的一个关键特性,使得代码更加灵活和可重用。
泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。(通俗的说,泛型编程中泛型的意思就是适用于所有类型。)
一、函数模板
1. 函数模板概念
函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。
2. 函数模板格式
template<typename T1, typename T2,......,typename Tn>
返回值类型 函数名(参数列表){}
注意:typename是用来定义模板参数关键字,也可以使用class(切记:不能使用struct代替class)函数模板就是用设置的模板替换了形参的具体类型。
eg. 甚至可以一个typename, class.
每一个使用模板的函数或类都必须在函数声明的上一行写上模板。
3. 函数模板的原理
模板的原理是编译器会自动帮我们推导参数和生成函数。
注,模板和auto不同,auto不能用于形参。