美文网首页
Function template

Function template

作者: 成江 | 来源:发表于2017-12-26 01:40 被阅读30次

    函数模板

    函数模板,实质上建立一个通用函数,其函数类型和形参不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。

    #include <iostream>
    using namespace std;
    template <typename T> // 模板声明,其中 T为类型参数
    T max(T a, T b, T c) {
        if (b > a) a = b;
        if (c > a) a = c;
        return a;
    }
    
    int main() {
        int i1 = 180, i2 = -76, i3 = 567, i;
        double d1 = 56.72, d2 = 90.23, d3 = -3214.78, d;
        long g1 = 67854, g2 = -912456, g3 = 673456, g;
        i = max(i1, i2, i3); // 调用模板函数,此时 T被 int 取代
        d = max(d1, d2, d3); // 调用模板函数,T被 double 取代
        g = max(g1, g2, g3);
        return 0;
    }
    

    定义函数莫半年的一般形式为:
    template <typename T> 或 template<class T>
    尖括号中先写关键字 typename(或 class),后面跟一个 i 跟一个类型参数 T,这个类型参数实际上是一个虚拟的类型名,表示模板出现的 T 是一个类型名,但是现在并未指定它是一个具体的类型。其实也可以不用 T 而用任何一个标识符,许多人习惯用 T(T是 Type 的第一个字母)。
    class 和 typename的作用相同,都表示类型名,二者可以互换。typename 是之后才被加到 C++标准中的,因为 class 容易与 C++中的类混淆。

    函数模板只适用于函数体相同、函数的参数个数相同而类型不同的情况,如果参数的个数不同,则不能用函数模板。

    相关文章

      网友评论

          本文标题:Function template

          本文链接:https://www.haomeiwen.com/subject/fztdgxtx.html