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)
|
||||
```
|
||||
|
||||
首先,编译器分析(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
Block a user