在 C++ 中,函数模板可以让我们写出与类型无关的通用函数,编译器会根据调用时传入的参数类型自动生成对应版本的函数。这种方式在写一些通用工具函数时非常实用。

什么是函数模板
函数模板是一种带类型参数的函数定义。它不是真正的函数,而是一个“模板”,当程序调用它并传入具体类型时,编译器才会实例化出对应类型的函数。
如何定义一个简单的函数模板
定义函数模板需要使用 template 关键字,后面跟尖括号括起来的类型参数列表。基本语法如下:
#include <iostream>
// 定义一个简单的函数模板,用于返回两个数中的较大者
template <typename T>
T max_value(T a, T b) {
if (a > b) {
return a;
}
return b;
}
int main() {
// 编译器会自动推导 T 为 int
int x = 10, y = 20;
std::cout << max_value(x, y) << std::endl;
// 编译器会自动推导 T 为 double
double m = 3.14, n = 2.71;
std::cout << max_value(m, n) << std::endl;
return 0;
}
在上面的代码中,template <typename T> 表示声明一个类型参数 T。函数 max_value 内部使用 T 作为占位类型,调用时传入 int 或 double 都可以。
显式指定模板参数
除了让编译器自动推导,也可以在调用时显式写出类型:
// 显式指定 T 为 int int result = max_value<int>(5, 8);
注意事项
- 类型参数名常用 T、U、V 等大写字母表示。
- 如果传入的两种参数类型不同,需要保证它们可以互相转换,或者显式指定类型。
- 模板定义通常放在头文件中,方便多个源文件使用。
小结
定义一个简单的 C++ 函数模板并不复杂,核心就是 template 加类型参数,再在函数里用这个参数代替具体类型。掌握它可以让你的代码更简洁、更易维护。