0
点赞
收藏
分享

微信扫一扫

## 1 模板

陆佃 2022-01-09 阅读 20


### 1.1 模板的概念

模板提高复用性,照片模板,PPT 模板,通用性强,并不是万能的。

```
模板的特点:


* 模板不可以直接使用,它只是一个框架


* 模板的通用并不是万能的
```


### 1.2 函数模板

* C++ 另一种编程思想为泛型编程,主要利用的技术就是模板
* C++ 提供两种模板机制:函数模板和类模板

#### 1.2.1 函数模板语法:
函数模板作用:


* 建立一个通用函数,其函数返回值类型和形参类型可以不具体指定,用一个虚拟的类型来代表

```
void f(int a)
```

模板语法:


```
template <typename T>
函数声明或定义
```
**解释:**


* template 英文是模板的意思,声明创建模板


* typename 数据类型,可以用 class 代替


* T 通用的数据类型,名称可以替换,通常为大写字母

 **总结**
 

1. 函数模板利用关键字 template
2. 使用函数模板有两种方式:自动类型推导、显示指定类型
3. 模板的目的是为了提高复用性,将类型参数化


#### 1.2.2 函数模板注意事项:
注意事项:


* 自动类型推导,必须推导出一致的数据类型T,才可以使用
* 模板必须要确定出T的数据类型,才可以使用

 **总结:**
 

* 使用模板时必须确定出通用数据类型 T,并能够推导出一致的类型


#### 1.2.3 函数模板案例
案例描述:


* 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序

#### 1.2.3 普通函数与模板函数的区别:

* 普通函数调用时可以发生自动类型转换(隐式类型转换)
* 函数模板调用时,如果利用自动类型推到,不会发生隐式类型转换
* 如果利用显示类型指定的方式,可以发生隐式类型转换


#### 1.2.3 普通函数与模板函数的调用规则:
调用规则如下:


1. 如果普通函数和函数模板都可以实现,优先调用普通函数
2. 可以通过空模板参数列表来强制调用函数模板
3. 函数模板也可以发生重载
4. 如果函数模板可以产生更好的匹配,优先调用函数模板

 **总结:**
 

* 既然提供了函数模板,就不要提供普通函数了,容易产生二义性。

#### 1.2.3 模板的局限性:


* 模板的通用性并不是万能的,
* 为了解决数组、或自定义类型提供模板的重载,提供具体化的模板

举报

相关推荐

0 条评论