Function template

函数模板

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

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

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

你可能感兴趣的:(Function template)