Templates 的使用

-Introduction : 你可以为你的函数写一个模板,也可以为你的类写一个模板。

  1. 为什么要为函数写一个模板?

    • 某个函数,针对不同数据。操作方法都是一样的,只是参数类型不同
    • 当然利用函数重载是没问题的,但是一个一个定义很麻烦,所以我们需要函数模板
template< class 形参名, class 形参名, ……> 返回类型 函数名(参数列表){ 函数体 }

    //这里的class跟类没任何关系,如果你觉得这个class让你觉得很烦,请使用下面的定义方法

template< typename 形参名, typename 形参名, ……> 返回类型 函数名(参数列表){ 函数体 }

 (1).实际使用中,template放在main函数外,放在头文件位置
 (2).使用的时候,直接调用函数,把数据直接放到函数里面,程序会自动判断这是何种类型的数据
     然后typename就变成了这种数据类型
  • 括号< >内部的内容叫做 “模板形参” ,就是这个模板函数要用的形参,很像函数形参
  • 模板形参不能为空
  • 模板函数声明过后,我们在模板函数体内,不仅可以使用这个 “模板形参 T” ,也可以使用其他类型
    • 例如: template < typename T, int c > T function_test( T& t , int c) { … }

2.为什么要写一个函数模板? 因为数据,方法的格式都是一样的,只是数据类型会不一样

template< typename 形参名, typename 形参名, ……> class 类名 {…};

举例:template< typename T> class A { public: T a; T b; T add(T c, T &d);};
  • 模板类实现方法: A< int > a 括号< >内填上本次实现过程中typename所对应的数据类型

    • 然后所有的T 全部被替换成本次所用的数据类型
  • 类模板外定义函数体的方法:

template < 模板形参参数列表> 函数返回类型 类名<模板形参名>::函数名(参数列表){函数体}

template< typename T1, typename T2> void A< T1, T2>::add(){ ... }

注意事项
(1).虽然template也可以使用自己的数据类型,但只能是int,其他的诸如double string string*不允许。但是double* double& 可以,对象引用或者对象指针可以

参考:
http://blog.csdn.net/yzhang6_10/article/details/50839516

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值