C++模板
①模板是实现代码重用机制的一种工具。就是根据参数类型生成函数和类的机制。它可以分成两类:一是函数模板,二是类模板,他们允许用户构造模板函数,模板类。
也可称通用的函数或者通用的类。
例如:①template<class T>
T compare_value(T a, T b);
②template < class Type>
class 类名
{
..../省略
};
②模板,模板函数,模板类和对象之间的关系:(实例化:用具体的类型去替换模板类型参数,然后他就会像普通函数或类那样被编译。)
※模板(函数模板,类模板)->实例化-> 模板函数。※模板(函数模板,类模板)->实例化-> 模板类->实例化->对象。
③模板函数是定义体和函数模板的定义体相同,而形式参数表的类型则以实际参数类型为依据,生成的重载函数。
函数模板和模板函数的差别:
首先,函数模板是模板的定义,定义中用到通用的类型参数。
其次,模板函数是函数的定义,在函数调用的时候,由编译系统编译生成,具有程序代码。
模板编译的的特点是:如果不被加载就不需要编译。
例如:标准迭代程序库的声明:template <class InputInerator, class Distance> void advance (InputInerator&i, Distance n);
④函数模板的声明和定义必须放在同一个文件里,因为模板的声明不是实际的类型或函数,所以模板声明并不占内存空间,且编译器不会对模板的声明进行编译,只有在实例化的时候才生成真正的类型或者函数。
⑤类模板允许用户为类定义一种模式,使得类中的某些数据成员,某些成员函数的参数或者返回值能取任意类型的数据类型。
Template < class Type>
class 类名
{
public:
Type a;
Type getValue(Type_value);
};
Template用来声明模板,class 后的Type是参数类型或者是非参数类型,可以一个或者多个,如。< class Type,typename Type2>,在类的定义中想要采用通用的数据类型的数据成员,成员函数的参数或者返回值前面需要加上Type。< class Type,typename Type2>尖括号是模板参数表。
⑥类模板和模板类的使用说明:
※每一个类模板定义之前,都要在前面加上模板声明:template < class Type>或者template <class T1, class T2>
※类模板使用时,必须在类名的后面缀上模板参数<Type>
※模板类可以有多个参数
类模板是类的集合不是实际的类,类模板的使用就是将类模板实例化成具体的类。格式: 类名 <实际的类型> 对象名。
实例创建两个参数是char 型的对象,example <char> e1,e2. 此时的example <char> 就是模板类。
⑦函数模板inline和extern的位置应该放在模板参数表后面。不是template的前面。
template <class Tpye > inline Type max(Type, Type);