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++入门经典

  • 相关阅读:
    函数数组
    编译和链接
    线程详解
    linux内核完全剖析——基于0.12内核-笔记(2)-统一编址和独立编址
    linux内核完全剖析——基于0.12内核-笔记(1)-CPU 数据通信
    input子系统事件处理层(evdev)的环形缓冲区【转】
    NFC驱动调试
    little kernel 小结
    Linux 设备树的解释
    Android中SELinux的TE简介【转】
  • 原文地址:https://www.cnblogs.com/Daringoo/p/4400952.html
Copyright © 2011-2022 走看看