模板使用中的一些规则

  1. 函数模板特化必须在实例化之前。
  2. 成员模板函数(MTF)的特化必须在类外,不能使用内联(inline)进行特化。
  3. 浮点数、类对象(class-type)、内部链接对象(如字符串常量"Hello World",注意:extern char const s[] = "hello"外部链接对象则可以)和全局指针不能作为非类型模板参数。能使用的有:整型或枚举、指针类型(普通指针&函数指针&成员指针)和引用类型(指向对象或函数的引用)
  4. 成员函数模板不能被声明为虚函数。
  5. 如果类模板中含有静态成员,那么用来实例化的每种类型都会实例化这些静态成员(显而易见)。
  6. GCC中>>中要留个空格,否则,编译器会报错。
  7. 类模板特化的实现可以和基本类模板的实现完全不一样。
  8. 类模板可以为模板参数定义缺省值,并且还可以引用前面的模板参数。
  9. 类模板不能喝另一个实体共享一个名称(显而易见)。
  10. 非类型模板参数可以借一个确定的数值来产生一种新类型或新函数。
  11. 局部类和局部枚举不能作为模板的类型实参。
  12. 未命名的class类型或枚举类型不能作为模板的类型实参(但,通过typedef声明给出的未命名类和枚举却可以作为模板类型的实参)。
  13. “模板是在程序创建的时候进行实例化的”。 模板实参的一个普遍约束是:在程序创建的时候,编译器或链接器要能够确定实参的值,而不能再运行时才能确定。
  14. 空指针常量、浮点型值和字符值不能作为有效的非类型实参。
原文地址:https://www.cnblogs.com/AmitX-moten/p/4449014.html