zoukankan      html  css  js  c++  java
  • 模板专题:函数模板

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

    注意调用的两种形式

    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

    五、

  • 相关阅读:
    第二阶段站立会议05
    第二阶段站立会议04
    第一阶段冲刺总结
    站立会议08
    站立会议07
    站立会议06
    站立会议05
    站立会议04
    第一次冲刺第3天
    站立会议2
  • 原文地址:https://www.cnblogs.com/tinaluo/p/6834939.html
Copyright © 2011-2022 走看看