zoukankan      html  css  js  c++  java
  • 重载(下)——函数模板

    函数(上)里介绍了函数的重载,但是为每个需要重载的函数编写多个函数实体是尤为麻烦的。这里可以用到一个名为函数模板的的形式来优化代码。

    函数模板形式:

    关键字 class把T标识为一个类型

     

    template < class T > T larger(T a,Tb)

     

    关键字template把这段代码标识为模板

     

    然后就可以在其他函数中实例化这个模板。一般来说,编译器会推断出函数需要实例化哪个版本的函数。但是有时也会推断错误,特别是有多个模板参数的时候,且容易造成内存占用过大。

    所以在调用的时候可以显示的指定模板参数

    Larger<long>(value1,value2)<<endl;

    这可以帮助编译器做出理想的决策,也可以转换不同类型的参数,适应于函数模板。

    模板参数是引用类型的说明:

    假如用地址参数调用函数large()——*larger(&a,&b),编译器会创建一个模板参数是long*的函数版本,这个函数的原型如下:long* larger(long*,long*)

    但是这样的函数题生成的函数如下所示:

    long* larger(long* a,long* b)

    {

    return a>b?a:b

    };

    这是在比较地址,而不是值。

    所以我们要重新定义一个模板的说明

    template<> long* larger<long*>(long *a,long* b)
    {

    return *a>*b?a:b;

    }

    带有多个参数的模板:用于解决函数的参数类型可能与返回类型不同的问题

     

     

     

     

    ——内容来自Horton的c++入门经典

  • 相关阅读:
    Tomcat安装与配置
    模板方法模式
    观察者模式
    访问者模式
    策略模式
    迭代器模式
    状态模式
    访问者模式
    备忘录模式
    解释器模式
  • 原文地址:https://www.cnblogs.com/Daringoo/p/4400952.html
Copyright © 2011-2022 走看看