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冲突

非类型模板参数:

在编译期或链接期可以确定的常值。这种参数的类型必须是下面的一种:

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是一个外部链接对象


 版权声明:本篇为原创文章,允许转载,但转载时请务必以超链接形式标明文章的原始出处和作者信息。请尊重本人的劳动成果,谢谢!