44 lines
736 B
Markdown
44 lines
736 B
Markdown
# 模板
|
||
|
||
## 函数模板
|
||
|
||
### 基本格式
|
||
|
||
```cpp
|
||
template <typename T>
|
||
void swap(T &a, T &b) {
|
||
T temp;
|
||
temp = b;
|
||
b = a;
|
||
a = temp;
|
||
}
|
||
```
|
||
__函数模板必须放在头文件里,因为它不是函数实体,只能算编译指令__
|
||
|
||
### 模板的几个术语
|
||
+ **隐式实例化**
|
||
```cpp
|
||
int a=0, b=3;
|
||
swap<int>(a, b);
|
||
```
|
||
+ **显式实例化**
|
||
```cpp
|
||
template void swap<int>(int&, int&); // 使用模板生成int类型的函数定义
|
||
```
|
||
+ **显式具体化**
|
||
```cpp
|
||
template <> void swap<int>(int&, int&);
|
||
```
|
||
__这个可以放到其他文件里,因为是有实体的__
|
||
|
||
### 类型推导
|
||
+ decltype()
|
||
```cpp
|
||
int a;
|
||
decltype(a) var;
|
||
```
|
||
|
||
## 类模板
|
||
|
||
+ 同样没有实体,包括类成员方法等都要写成模板的格式
|