C++模板

目录

模板的类别

推导实例化的使用方式及要求

显示实例化的使用方式及要求


完成了C++类和对象的学习,就要进入C++模板的学习了。模板是泛型编程(编写与类型无关的代码,是代码复用的一种手段)的基础,使C++编程更加方便且高效,为C++的使用推广做出了极大的贡献。

 

模板的类别

C++模板又分为函数模板类模板。通过函数模板生成对应的函数这种行为,称为模板实例化.模板实例化的方式又分为两种,分别是推导实例化显示实例化,我们来细看下这两种实例化方式。

  1. template<class T>
  2. T Swap(T& a,T& b){
  3. T c=a;
  4. a=b;
  5. b=c;
  6. return c;}
  7. //template<typename T1,class T2>
  8. // T Swap(T1& a,T2& b){
  9. //T c=a;
  10. //a=b;
  11. //b=c;
  12. 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++模板函数还有一点需要注意的是,当模板函数和现成函数同时存在时,程序会优先走现成的,而不是就近原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值