目录
完成了C++类和对象的学习,就要进入C++模板的学习了。模板是泛型编程(编写与类型无关的代码,是代码复用的一种手段)的基础,使C++编程更加方便且高效,为C++的使用推广做出了极大的贡献。
模板的类别
C++模板又分为函数模板和类模板。通过函数模板生成对应的函数这种行为,称为模板实例化.模板实例化的方式又分为两种,分别是推导实例化和显示实例化,我们来细看下这两种实例化方式。
- template<class T>
- T Swap(T& a,T& b){
- T c=a;
- a=b;
- b=c;
- return c;}
- //template<typename T1,class T2>
- // T Swap(T1& a,T2& b){
- //T c=a;
- //a=b;
- //b=c;
- return c;}
推导实例化的使用方式及要求
我们通过调用模板函数,不做显示要求,编译器通过对参数类型的推导自动生成函数,这就是推导实例化。看看代码:
int a=1;
double b=2.1;
int c=2;
double d=3.2;
Swap(a,c);
Swap(b,d);
//Swap(a,b);参数类型不匹配,报错
如代码展示,当参数类型一致,模板函数会通过推导实例化生成对应的函数,但如果类型不匹配就会报错,但同时,我们也能对参数进行强制类型转换,只是会有数据缺失的警告。
我们也可以设置多个模板,从而解决问题。如模板的类别代码“7-12行”。其中“typename”代表的语义其实就是class,也可以与class混用,看个人选择。
显示实例化的使用方式及要求
与推导实例化的调用不同,推导实例化的写法是:
Swap<int>(a,b);
要加个<类型>来决定返回返回函数的类型。
关于C++模板函数还有一点需要注意的是,当模板函数和现成函数同时存在时,程序会优先走现成的,而不是就近原则。