mirror of
https://github.com/wuye9036/CppTemplateTutorial.git
synced 2024-03-22 13:11:16 +08:00
深入理解偏特化内容 update
rt
This commit is contained in:
parent
e5e89346b2
commit
e6cb6093d7
|
@ -1830,18 +1830,18 @@ DoWork<int> i; // (4)
|
||||||
DoWork<float*> pf; // (5)
|
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++
|
```C++
|
||||||
// 以下为伪代码
|
// 以下为伪代码
|
||||||
TemplateDict[DoWork<T>] = {
|
TemplateSpecDict[DoWork<T>] = {
|
||||||
DoWork<int>,
|
DoWork<int>,
|
||||||
DoWork<float>,
|
DoWork<float>,
|
||||||
DoWork<U*>
|
DoWork<U*>
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
然后 (4) 试图以`int`实例化类模板`DoWork`。它会在`TemplateDict`中,找到`DoWork`,它有一个形式参数`T`接受类型,正好和我们实例化的要求相符合。并且此时`T`被推导为`int`。(5) 中的`float*`也是同理。
|
然后 (4) 试图以`int`实例化类模板`DoWork`。它会在`TemplateSpecDict`中,找到`DoWork`,它有一个形式参数`T`接受类型,正好和我们实例化的要求相符合。并且此时`T`被推导为`int`。(5) 中的`float*`也是同理。
|
||||||
|
|
||||||
```C++
|
```C++
|
||||||
{ // 以下为 DoWork<int> 查找对应匹配的伪代码
|
{ // 以下为 DoWork<int> 查找对应匹配的伪代码
|
||||||
|
|
Loading…
Reference in New Issue
Block a user