• 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)函数的所有重载说明在该函数被调用位置之前。

  • 相关阅读:
    PAT (Advanced Level) 1060. Are They Equal (25)
    PAT (Advanced Level) 1059. Prime Factors (25)
    PAT (Advanced Level) 1058. A+B in Hogwarts (20)
    PAT (Advanced Level) 1057. Stack (30)
    PAT (Advanced Level) 1056. Mice and Rice (25)
    PAT (Advanced Level) 1055. The World's Richest (25)
    PAT (Advanced Level) 1054. The Dominant Color (20)
    PAT (Advanced Level) 1053. Path of Equal Weight (30)
    PAT (Advanced Level) 1052. Linked List Sorting (25)
    PAT (Advanced Level) 1051. Pop Sequence (25)
  • 原文地址:https://www.cnblogs.com/jast/p/4141048.html
Copyright © 2020-2023  润新知