模板
这两段分别是int类型和double类型的swap函数的实现

但是比较繁琐,所以就有了泛型编程--模板
模板有两种,一种叫函数模板,一种叫类模板

这个是模板的例子这里的template和class是关键字,T叫做模板参数可以用其他字符代替

模板的特质
每个类型的交换函数本来是要用户写的,但是使用模板时用户就只能写一份,其他的让编译器写,也就是说模板并没有减少工作量而是转移了工作
这两个函数就是模板最后实例化出的代码

这里除了有class关键字还有typename关键字,两者都可
![]()
也可以定义多个模板参数

并且C++函数库里面也存在swap函数,不需要自己写
模板实例化的小问题
这段代码是不能通过的,编译器实例化时出现了歧义,使用a1时T被当作了int使用d1时T被当作了double

办法就是强转

又或者加一个模板参数,显式实例化,不用系统去推导数据类型了

当函数和对应的模板同时存在时,编译器会优先调用第一个,因为调用模板还需要进行实例化,相比直接调用成本更高

类模板
使用typedef可以解决一个类存储各种类型的数据的问题

但是不能让一个类同时存储两种类型的数据

但定义这样的一个类模板就可以解决问题

而且类模板只能显式实例化

2230

被折叠的 条评论
为什么被折叠?



