修改了1.3节一处示例代码的错误,补充了一些文字。

This commit is contained in:
Wu Ye 2014-02-12 23:44:12 -08:00
parent 480d599cb9
commit 50b2a8cffb

View File

@ -467,7 +467,7 @@ void foo()
```
因为x不是一个编译期常量所以 `A<x>` 就会告诉你x是一个局部变量不能作为一个模板参数出现。
嗯,这里我们再写几个相对复杂的例子:
嗯,这里我们再写几个相对复杂的例子:
``` C++
template <int i> class A
@ -490,7 +490,7 @@ void foo()
{
A<5> a;
B<
7, A<5>, nullptr, false
7, A<5>, nullptr
> b; // 模板参数可以是一个无符号八位整数,可以是模板生成的类;可以是一个指针。
C<false, &foo> c; // 模板参数可以是一个bool类型的常量甚至可以是一个函数指针。
D<&A<3>::foo> d; // 丧心病狂啊!它还能是一个成员函数指针!
@ -500,7 +500,10 @@ void foo()
template <float a> class E {}; // ERROR: 别闹!早说过只能是整数类型的啦!
```
当然除了单纯的用作常数之外整型参数还有一些其它的用途。这些“其它”用途最重要的一点是让类型也可以像整数一样运算。《Modern C++ Design》给我们展示了很多这方面的例子。不过你不用急着去阅读那本天书我们会在做好足够的知识铺垫后让你轻松学会这些招数。
###1.4 模板形式与功能是统一的
第一章走马观花的带着大家复习了一下C++ Template的基本语法形式也解释了包括 `typename` 在内,类/函数模板写法中各个语法元素的含义。形式是功能的外在体现,介绍它们也是为了让大家能理解到,模板之所以写成这种形式是有必要的,而不是语言的垃圾成分。
从下一章开始,我们便进入了更加复杂和丰富的世界:讨论模板的匹配规则。其中有令人望而生畏的特化与偏特化。但是,请相信我们在序言中所提到的:将模板作为一门语言来看待,它会变得有趣而简单。