📜  c++中的函数模板(1)

📅  最后修改于: 2023-12-03 14:39:58.018000             🧑  作者: Mango

C++中的函数模板

介绍

函数模板是一种通用的函数定义,可以用于不同类型的参数,使代码更具可复用性。函数模板定义了一种函数的形式,在使用时再根据实际需要,生成具体的函数。这样可以避免代码重复,提高代码的可维护性和可扩展性。

语法

函数模板的语法和函数定义类似,只是在函数名称和参数列表中添加了一个模板参数。

template <typename T>
void func(T t) {
    // 函数体
}

上述代码定义了一个函数模板 func,其中 typename T 是模板参数,可以根据需要替换为其他类型。

在函数内部,可以使用模板参数 T 代表实际调用时传递的类型。下面是一个示例,用于计算两个数的最大值。

template <typename T>
T max(T a, T b) {
    return a > b ? a : b;
}
使用

使用函数模板时,需要在调用函数时指定模板参数的类型。例如:

int result = max<int>(2, 3);

或者可以根据参数类型的推导自动推断模板参数的类型,代码如下:

int result = max(2, 3);  // 自动推导为 int 类型

如果需要使用多个模板参数,可以用逗号分隔它们。例如:

template <typename T, typename U>
void func(T t, U u) {
    // 函数体
}

使用时同样需要在调用函数时指定模板参数的类型。

特化

有时候需要对某些特定类型的参数进行处理,可以使用函数模板的特化(特例化)。特化是指针对特定类型的参数,提供特殊的函数实现。

下面是一个示例,用于比较两个字符串的大小。由于字符串是 char * 类型,不能直接使用运算符比较,因此需要另外实现一个比较函数。

template <typename T>
int compare(T a, T b) {
    if (a > b) {
        return 1;
    } else if (a < b) {
        return -1;
    } else {
        return 0;
    }
}

// 特化
template <>
int compare(char *a, char *b) {
    return strcmp(a, b);
}

可以看到,特化实现的函数与模板函数的语法基本相同,只是在模板参数列表后面添加了一对尖括号,并使用空语句定义了空的模板参数列表。

总结

函数模板是 C++ 语言中的一项重要特性,可以实现代码的复用和模块化设计。通过合理的使用模板,可以避免代码的重复,提高代码的可读性、可维护性和可扩展性。