做网站实训心得,合肥建设工程网,seo查询官网,国外服务器网站1.函数模板
我们经常用到Swap函数交换两个值。由于需要交换的数据的类型不同#xff0c;我们就需要写不同参数类型的同名函数#xff0c;也就是函数重载#xff1a;
然而这三个函数的逻辑是一样的#xff0c;写这么多有些多此一举#xff0c;通过函数模版可以写一个通用…1.函数模板
我们经常用到Swap函数交换两个值。由于需要交换的数据的类型不同我们就需要写不同参数类型的同名函数也就是函数重载
然而这三个函数的逻辑是一样的写这么多有些多此一举通过函数模版可以写一个通用的交换函数。
---------------------------------------------------------------------------------------------------------------------------------
1.格式templatetypename T1,typename T2,......typename Tn
typename是关键字也可以用class代替
T1-Tn是函数的参数类型名T可以用别的名字代替只是我们习惯用T
---------------------------------------------------------------------------------------------------------------------------------
2.用法 ---------------------------------------------------------------------------------------------------------------------------------
3.原理
检测你传入的参数类型隐式的帮你生成这一类型的函数重载。实际上仍然生成了多个函数调用的时候也不是调用同一个函数而是调用对应的函数重载只不过编译器替你写了这些函数。实际上由于交换函数使用频繁已经被纳入库中swap不需要我们去写
---------------------------------------------------------------------------------------------------------------------------------
4.函数模版的显式实例化
1有一种情况
编译器不确定T是int还是double类型。
为了解决这个问题你可以这样
但是你也可以这样 这样直接指定了T类型而不用编译器推演叫做函数模板的显式实例化这种情况下b会转换为int类型 2但是如果同一个模板参数只做返回值的话 编译器不能根据推演返回值类型所以必须模板实例化 3如果有多个模板类型 也可以同时指定T1,T2返回值类型可以由T1决定T1通过参数推演。T1不是只做返回值也就不是3的那种情况
--------------------------------------------------------------------------------------------------------------------------------- 2.类模板 类模板与函数模板不同的点在于创建对象时一定要指定模板参数类型.
Aint就相当于st1的类型
--------------------------------------------------------------------------------------------------------------------------------- 类模板中的成员函数函数放在类外进行定义是这样的 必须加上模板参数列表templateclass T 类型也要写成AT