在C++中模板分为两类:函数模板与类模板(多态的一种)
(定义的叫函数模板,实例出来的叫模板函数)
函数模板代码形式如下:
template <class type1,class type2....>
type1 func(type2 a,type2 b....){
/*函数体*/
}
//type是类型参数,当定义好模板后,在代码中调用模板函数,则会自动将传入的参数类型替换type
可以看到模板是针对类型的,即使用模板时针对的是函数体相同,但处理的变量类型不同的情况。
例如,我们写一个交换int型变量的函数swap(),如果后面又需要添加一个交换double类型的swap又该怎么办?如果我们重写一个新的函数,两个swap之间其实就只有变量类型不同而已,如果代码体量很大,重写终究是件很累赘的事情,利用模板则可以在编译时自动生成对应类型的模板函数,对写代码的人来说无疑是极其方便的。
除了让编译器自动来替换参数的类型,还可以自己手动替换,例如:
template <class T>
T func(){
/*函数体*/
}
func<int>(); //手动设置
类模板代码形式如下:
template <class T>
class A{
....
}
//类模板生成对象
A<int> a1;
A<double> a2(1.0); //联系STL,生成容器就是这种方式、
//在类模板外进行成员函数定义,要写成函数模板形式
template <class T>
返回类型 类名<T>::成员函数名(T a,T b){...} //注意这里写的<T>
//在类模板外进行static变量定义
template <class T>
返回类型 类名<T>::m_static = 0;