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