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