📅  最后修改于: 2023-12-03 14:39:58.018000             🧑  作者: Mango
函数模板是一种通用的函数定义,可以用于不同类型的参数,使代码更具可复用性。函数模板定义了一种函数的形式,在使用时再根据实际需要,生成具体的函数。这样可以避免代码重复,提高代码的可维护性和可扩展性。
函数模板的语法和函数定义类似,只是在函数名称和参数列表中添加了一个模板参数。
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++ 语言中的一项重要特性,可以实现代码的复用和模块化设计。通过合理的使用模板,可以避免代码的重复,提高代码的可读性、可维护性和可扩展性。