1、在C++中,模板是泛型编程的基础。模板是创建类或函数的蓝图或公式。
2、模板定义以关键字template开始,后接模板形参表,模板形参表是用尖括号括住的一个或多个模板形参的列表,形参之间以逗号分隔。
3、函数模板可以用与非模板函数一样的方式声明为inline。说明符放在模板形参表之后、返回类型之前,而不能放在关键词template之前。
4、模板形参遵循常规名字屏蔽规则,与全局作用域中声明的对象、函数或类型同名的模板形参会屏蔽全局名字。
5、在函数模板形参表中,关键字typename和class具有相同的含义,可以相互使用,两个关键字都可以在同一模板形参表中使用。
6、模板在使用时将进行实例化,类模板在引用实际模板类类型时实例化,函数模板在调用它或用它对函数指针进行初始化或赋值时实例化。
7、如果想要允许实参的常规转换,则函数必须用两个类型形参来定义:
template <typename A, typename B> int compare(const A& v1, const const B& v2) { if (v1 < v2) return -1; if (v2 < v1) return 1; return 0; }
8、当编译器看到模板定义的时候,它不立即产生代码,只是在看到模板时,如果调用了函数模板或定义了类模板的对象的时候,编译器才产生特定类型的模板实例。
9、在类模板中可以出现三种友元(友元函数或友元类)声明,每一种都声明了与一个或多个实体的友元关系:(1)普通非模板类或函数的友元声明,将友元关系授予明确指定的类或函数;(2)类模板或函数模板的友元声明,授予对友元所有实例的访问权限;(3)只授予对类模板或函数模板的特定实例的访问权的友元声明。
10、类模板可以像任意其他类一样声明static静态成员,给个类模板的实例化表示截然不同的类型,所以给定实例化的所有对象都共享一个static静态成员。
除非注明,文章均为CppLive 编程在线原创,转载请注明出处,谢谢。