~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

第一个例子:比较两个数值的大小(整型、浮点型等)

注意调用的两种形式

template<class T>
T TSWAP(const T &a,const T &b)
{
    return a > b ? a : b;    
}
int main()
{
    cout << TSWAP(9, 20) << endl;
    /*cout << TSWAP<int>(9, 20) << endl;*//*也可行;*/
    cout << TSWAP(9.5, 6.3) << endl;
    return 0;
}
View Code

*注:对于函数模板,还有一个比较好的例子。假如实现一个函数,能够将大部分类型的数据输出,如果不用模板会很难实现,而用模板则很好的解决这个问题。

这个例子也说明了为什么必须用函数模板的一个原因。

template<class T>
void PrintData(const T data)
{
    cout<<data<<endl;
}
View Code

二、隐式实例化

隐式实例化是指模板中的参数直到调用时才确定,并且由编译器根据传递过去的参数类型自动完成,比如上面的例子。

特点:一切都是未知。

三、显式实例化

显式实例化是指命令编译器直接创建满足条件的模板函数。

例子:

template int TSWAP<int>(const int ,const int );

特点:直接显式生成,但是没有函数体,而且只能显式声明一次。  

四、特化

特化就是可以产生特殊操作,比如,如果参数是两个整型,函数就将两数相加,如果参数是两个double,就将两数相乘(当然,这个例子不太实际)。

特点:产生特殊操作,有函数体

#include <iostream>
#include <string>
using namespace std;
template<class T>
T f(const T &a,const T &b)
{
    return a+b;
}
template<> double f(const double &a,const double &b)
{
    return a*b;
}

int main()
{
    cout<<f(20,10)<<endl;    
    cout<<f(20.5,10.0)<<endl;    //调用特化函数
    return 0;
}
View Code

五、

 

posted on 2017-05-10 11:13  LuoTian  阅读(211)  评论(0编辑  收藏  举报