C++ Templates读书笔记< 三 > 类模板,非类型模板
类模板:
* 如果类模板中含有静态成员,那么用来实例化的每种类型,都会实例化这些静态成员。
* 两个靠在一起的模板尖括号( > ) 之间需要留个空格,否则,编译器将会认为是在使用operator>>,导致语法错误。
* 特化的实现可以和基本类模板的实现完全不同。
* 类模板可以为模板参数定义缺省值,称为缺省模板实参,并且他们还可以引用之前的模板参数。
* 成员函数模版不能被声明为虚函数。
* 类模板不能和另外一个实体共享一个名称。
eg:
1 int C;
2
3 class C; // ok,
4
5 int X;
6
7 template < typename T >
8
9 class X; // error. 和变量X冲突
2
3 class C; // ok,
4
5 int X;
6
7 template < typename T >
8
9 class X; // error. 和变量X冲突
非类型模板参数:
在编译期或链接期可以确定的常值。这种参数的类型必须是下面的一种:
a> 整型或枚举
b> 指针类型( 普通对象的指针,函数指针,成员指针 )
c> 引用类型( 指向对象或者指向函数的引用 )
其他的类型目前都不允许作为非类型模板参数使用
eg:内部链接对象不允许作为非类型模板参数
1 template < char const* name >
2
3 class MyClass
4
5 {
6
7 };
8
9 char const* s = "hello";
10
11 MyClass<s> x; // error; s是一个指向内部链接对象的指针
12
13 extern char const s[] = "hello";
14
15 MyClass<s> x; // ok; s是一个外部链接对象
2
3 class MyClass
4
5 {
6
7 };
8
9 char const* s = "hello";
10
11 MyClass<s> x; // error; s是一个指向内部链接对象的指针
12
13 extern char const s[] = "hello";
14
15 MyClass<s> x; // ok; s是一个外部链接对象
版权声明:本篇为原创文章,允许转载,但转载时请务必以超链接形式标明文章的原始出处和作者信息。请尊重本人的劳动成果,谢谢!
小祥的BLOG http://xfxsworld.cnblogs.com