Compare commits
3 Commits
89e47a286d
...
a9ae966337
Author | SHA1 | Date |
---|---|---|
文佳鹏 | a9ae966337 | |
Yangtze | bd897729f5 | |
文佳鹏 | e6cb6093d7 |
10
ReadMe.md
10
ReadMe.md
|
@ -18,7 +18,7 @@
|
|||
- [2.2.2. Class Template的与成员变量定义](#222-class-template的与成员变量定义)
|
||||
- [2.2.3. 模板的使用](#223-模板的使用)
|
||||
- [2.2.4. 类模板的成员函数定义](#224-类模板的成员函数定义)
|
||||
- [2.3. 函数模板 (Function Tempalte) 入门](#23-函数模板-function-tempalte-入门)
|
||||
- [2.3. 函数模板 (Function Template) 入门](#23-函数模板-function-template-入门)
|
||||
- [2.3.1. 函数模板的声明和定义](#231-函数模板的声明和定义)
|
||||
- [2.3.2. 函数模板的使用](#232-函数模板的使用)
|
||||
- [2.4. 整型也可是Template参数](#24-整型也可是template参数)
|
||||
|
@ -300,7 +300,7 @@ void vector<T> /*看起来像偏特化*/ ::clear() // 函数的实现放在这
|
|||
}
|
||||
```
|
||||
|
||||
## 2.3. 函数模板 (Function Tempalte) 入门
|
||||
## 2.3. 函数模板 (Function Template) 入门
|
||||
|
||||
### 2.3.1. 函数模板的声明和定义
|
||||
|
||||
|
@ -1817,18 +1817,18 @@ DoWork<int> i; // (4)
|
|||
DoWork<float*> pf; // (5)
|
||||
```
|
||||
|
||||
首先,编译器分析(0), (1), (2)三句,得知(0)是模板的原型,(1),(2),(3)是模板(0)的特化或偏特化。我们假设有两个字典,第一个字典存储了模板原型,我们称之为`TemplateDict`。第二个字典`TemplateSpecDict`,存储了模板原型所对应的特化/偏特化形式。所以编译器在处理这几句时,可以视作
|
||||
首先,编译器分析(0), (1), (2), (3)四句,得知(0)是模板的原型,(1),(2),(3)是模板(0)的特化或偏特化。我们假设有两个字典,第一个字典存储了模板原型,我们称之为`TemplateDict`。第二个字典`TemplateSpecDict`,存储了模板原型所对应的特化/偏特化形式。所以编译器在处理这几句时,可以视作
|
||||
|
||||
```C++
|
||||
// 以下为伪代码
|
||||
TemplateDict[DoWork<T>] = {
|
||||
TemplateSpecDict[DoWork<T>] = {
|
||||
DoWork<int>,
|
||||
DoWork<float>,
|
||||
DoWork<U*>
|
||||
};
|
||||
```
|
||||
|
||||
然后 (4) 试图以`int`实例化类模板`DoWork`。它会在`TemplateDict`中,找到`DoWork`,它有一个形式参数`T`接受类型,正好和我们实例化的要求相符合。并且此时`T`被推导为`int`。(5) 中的`float*`也是同理。
|
||||
然后 (4) 试图以`int`实例化类模板`DoWork`。它会在`TemplateSpecDict`中,找到`DoWork`,它有一个形式参数`T`接受类型,正好和我们实例化的要求相符合。并且此时`T`被推导为`int`。(5) 中的`float*`也是同理。
|
||||
|
||||
```C++
|
||||
{ // 以下为 DoWork<int> 查找对应匹配的伪代码
|
||||
|
|
Loading…
Reference in New Issue