zoukankan      html  css  js  c++  java
  • Template函数

    1.模板函数为不同的模板实参定义了一个函数家族。它的表示看起来和普通的函数很相似,唯一的区别是有些函数元素是未确定的:这些参数将在使用的时候被参数化。

    template <typename T>
    inline T const& max(T const& a,T const& b)
    {
        return a<b ? b : a; 
    }
    上述例子中的参数类型没有确定,用模板参数T来代替。
     

    2.函数模板的实例化:使用具体的类型代替模板参数的过程。这个过程产生了一个模板的实例。这个过程是在编译的时候进行的。

    模板内部的操作要被进行参数的类型所支持,否则会出错。

    在编译的时候:

    1)实例化前,先检查模板代码本身,查看语法错误等,如遗漏分号等;

    2)在实例化期间,检查模板代码,查看是不是所有的调用都有效。如该实例化类型不支持某些函数的调用。

    3.显示指定模板参数

    模板参数不支持自动类型转换,每个T都必须准确的匹配。

    template <typename T>
    inline T const7 max(T const& a, T cosnt& b);
    ...
    max(4,7)                    //OK
    max(4,4.2)                //ERROR,第一个是int,第二个是double
    有几种解决办法,
    1)max(static_cast(double)(4),4.2)   //OK
    2)显示指定模板参数:
    max<double>(4,4.2)
    3)使用连个模板参数。
     

    4.重载函数模板

    和普通函数一样,模板函数同样可以被重载,相同的函数名称可以具有不同的函数定义。

    几条基本的原则:

    1)非模板函数和一个同名的模板函数可以同时存在。对于非模板函数和同名的函数模板,如果其他条件都相同的话,在调用的时候将调用非模板函数,不会实例化模板函数。

    2)如果模板产生一个更好的匹配,选择模板参数。

    3)可以显示的指定一个空的模板实例列表,告诉编译器,用模板来匹配。

    4)函数的所有重载说明在该函数被调用位置之前。

  • 相关阅读:
    H5+ 分享到微信、朋友圈代码示例
    H5+ 重写在线升级版本比较代码
    H5+ a页面打开b页面,b页面加载成功后关闭当前页面,闪屏的规避解决方案
    MUI
    MUI
    MUI
    MUI
    Vue实战之【企业开发常见问题】
    step1:准备歌词之《前端开发是个啥》
    element-ui级联选择器(Cascader)获取级联对象 (主要是想获取:label值)
  • 原文地址:https://www.cnblogs.com/jast/p/4141048.html
Copyright © 2011-2022 走看看