From 50b2a8cffbd53c09cef2c8c10f2ac6279ab56ff2 Mon Sep 17 00:00:00 2001 From: Wu Ye Date: Wed, 12 Feb 2014 23:44:12 -0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=861.3=E8=8A=82?= =?UTF-8?q?=E4=B8=80=E5=A4=84=E7=A4=BA=E4=BE=8B=E4=BB=A3=E7=A0=81=E7=9A=84?= =?UTF-8?q?=E9=94=99=E8=AF=AF=EF=BC=8C=E8=A1=A5=E5=85=85=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E6=96=87=E5=AD=97=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ReadMe.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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` 在内,类/函数模板写法中各个语法元素的含义。形式是功能的外在体现,介绍它们也是为了让大家能理解到,模板之所以写成这种形式是有必要的,而不是语言的垃圾成分。 从下一章开始,我们便进入了更加复杂和丰富的世界:讨论模板的匹配规则。其中有令人望而生畏的特化与偏特化。但是,请相信我们在序言中所提到的:将模板作为一门语言来看待,它会变得有趣而简单。