在 C++ 中,创建通用的函数最常用的方法就是使用函数模板。通过模板,我们可以把数据类型参数化,让同一段逻辑适配多种类型,而不必为每种类型都重写一遍函数。

什么是函数模板
函数模板是带有一个或多个类型参数的函数定义。编译器在调用时根据实参类型自动实例化出具体的函数版本。基本语法如下:
#include <iostream>
// 定义一个通用求和函数模板
template <typename T>
T add(T a, T b) {
return a + b;
}
int main() {
int x = 1, y = 2;
double m = 1.5, n = 2.5;
// 编译器自动推导出 T 为 int
std::cout << add(x, y) << std::endl;
// 编译器自动推导出 T 为 double
std::cout << add(m, n) << std::endl;
return 0;
}
多个类型参数的通用函数
如果参数类型不同,可以使用多个类型参数来定义更灵活的通用函数:
#include <iostream>
// 两个不同类型参数的通用函数
template <typename T, typename U>
void printPair(T first, U second) {
std::cout << "first: " << first << ", second: " << second << std::endl;
}
int main() {
printPair(10, "hello");
printPair(3.14, 100);
return 0;
}
显式指定模板参数
有时编译器无法推导,或者你想强制使用某种类型,可以在调用时显式写明:
#include <iostream>
template <typename T>
T maxValue(T a, T b) {
return (a > b) ? a : b;
}
int main() {
// 显式指定 T 为 double
std::cout << maxValue<double>(3, 4.5) << std::endl;
return 0;
}
通用函数的注意点
- 模板定义通常放在头文件中,因为编译器需要在实例化时看到完整定义。
- 不是所有类型都支持相同的运算符,比如自定义类型需要重载相应操作符才能用于通用函数。
- 可以用
typename或class声明类型参数,两者在模板参数里基本等价。
小结
使用 template 关键字配合类型参数,就能快速创建通用的 C++ 函数。这种方式减少了重复代码,也提高了可维护性。当你熟悉了函数模板后,还可以进一步学习类模板和模板特化,写出更强大的泛型代码。