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

    五、

  • 相关阅读:
    Swift学习一
    Swift开发学习(一):初始篇
    objc_msgSend arm64 崩溃问题
    更改navigationController push和pop界面切换动画
    iOS 改变UITextField中光标颜色
    IOS Core Animation Advanced Techniques的学习笔记(五)
    使用CAShapeLayer与UIBezierPath画出想要的图形
    亮相SIGGRAPH 太极拳三维教学App制作揭秘
    MySQL优化——索引
    求职前一个月复习知识
  • 原文地址:https://www.cnblogs.com/tinaluo/p/6834939.html
Copyright © 2011-2022 走看看