增加“名称查找”一节。

This commit is contained in:
Ye WU 2015-11-24 00:33:09 -08:00
parent f961f8a3d7
commit 473b429e93

View File

@ -1,4 +1,4 @@

# C++ Template 进阶指南 # C++ Template 进阶指南
## 0. 前言 ## 0. 前言
@ -1234,8 +1234,9 @@ void PrintID()
但是呢,直觉对付更加复杂的问题还是没用的(也不是没用,主要是你没这个直觉了)。我们要把这个直觉,转换成合理的规则——即模板的匹配规则。 但是呢,直觉对付更加复杂的问题还是没用的(也不是没用,主要是你没这个直觉了)。我们要把这个直觉,转换成合理的规则——即模板的匹配规则。
当然,这个匹配规则是对复杂问题用的,所以我们会到实在一眼看不出来的时候才会动用它。一开始我们只要把握:模板是从最特殊到最一般形式进行匹配就可以了。 当然,这个匹配规则是对复杂问题用的,所以我们会到实在一眼看不出来的时候才会动用它。一开始我们只要把握:模板是从最特殊到最一般形式进行匹配就可以了。
####2.2.4 即用即推导 ###2.3 即用即推导
####2.3.1 视若无睹的语法错误
这一节我们将讲述模板一个非常重要的行为特点:那就是什么时候编译器会对模板进行推导,推导到什么程度。 这一节我们将讲述模板一个非常重要的行为特点:那就是什么时候编译器会对模板进行推导,推导到什么程度。
这一知识,对于理解模板的编译期行为、以及修正模板编译错误都非常重要。 这一知识,对于理解模板的编译期行为、以及修正模板编译错误都非常重要。
@ -1268,9 +1269,14 @@ template <typename T> struct Y
3. 为什么类型定义3会导致编译错误 3. 为什么类型定义3会导致编译错误
4. 为什么`void foo()`在MSVC下什么错误都没报 4. 为什么`void foo()`在MSVC下什么错误都没报
这时我们就需要请出C++11标准了。这是到目前为止我们第一次阅读标准。我希望能尽量减少直接阅读标准的次数因此即便是极为复杂的模板匹配决议我都暂时没有引入标准中的描述。
然而Template引入的“双阶段名称查找Two phase name lookup”堪称是C++中最黑暗的角落 —— 这是LLVM的团队自己在博客上说的 —— 因此在这里阅读标准是必要的。
###2.3 函数模板的重载、参数匹配、特化与部分特化 ####2.3.2 名称查找I am who I am
###2.4 技巧单元:模板与继承 在C++标准中名称查找name lookup集中出现在三处。第一处是3.4节标题名就叫“Name Lookup”第二处在10.2节继承关系中的名称查找第三处在14.6节名称解析name resolution
###2.4 函数模板的重载、参数匹配、特化与部分特化
###2. 技巧单元:模板与继承
## 3 拿起特化的武器,去写程序吧! ## 3 拿起特化的武器,去写程序吧!