C++ 函数模板:参数推导、实例化与编译优化
在 C++ 中,模板(Template)是泛型编程的基石。它允许我们编写与类型无关的代码,实现高度的复用性。如果说函数重载是多态的一种表达,那么模板则是更底层的类型抽象机制。
函数模板的概念
函数模板定义了一系列具有相似功能但可处理不同数据类型的函数。通过模板,编译器能根据实际使用的参数类型自动生成具体的函数实例,无需为每种类型重复编写代码。
语法结构
template<typename T, typename U, ...>
ReturnType FunctionName(ParamList) {
// 函数体
}
template:声明模板的关键字。typename(或class):声明类型参数占位符。T:类型参数名称,通常使用大写字母。
示例
template<typename T>
void Swap(T& left, T& right) {
T temp = left;
left = right;
right = temp;
}
调用时,编译器会根据实参自动推导类型,这称为隐式实例化。
int main() {
int a1 = 10, a2 = 20;
double d1 = 10.0, d2 = 20.0;
Swap(a1, a2); // 推导 T 为 int
Swap(d1, d2); // 推导 T 为 double
return 0;
}
注意,如果传入不同类型参数(如 Swap(a1, d1)),编译器无法确定唯一的 T,会报错。此时需要用户强制转换或显式指定类型。
显式实例化
有时我们希望提前生成特定类型的代码,可以使用显式实例化:
Add<int>(a, b); // 强制生成 int 版本的 Add 函数


