引言
C++ 模板是实现泛型编程的核心工具,它允许我们编写与具体类型无关的代码。这不仅提高了代码的复用性,还保持了类型安全。模板在编译阶段进行实例化,根据实际使用的类型生成具体的代码,因此通常不会带来额外的运行时开销。
一、为什么需要模板?
在开发过程中,我们经常遇到需要处理多种数据类型的场景。比如写一个求最大值的函数,如果只用传统的方法,我们需要为 int、double、string 等每种类型都写一遍重载函数。这会导致大量重复代码,且一旦算法逻辑变更(比如改为求最小值),所有重载都要修改,维护成本很高。
模板的出现解决了这个问题。它将类型作为参数,编译器会根据调用时传入的具体类型自动生成对应的代码版本。
1. 函数重载 vs 函数模板
传统方法:函数重载
#include <iostream>
#include <string>
using namespace std;
// 为 int 重载
int max(int a, int b) {
cout << "int version\n";
return a > b ? a : b;
}
// 为 double 重载
double max(double a, double b) {
cout << "double version\n";
return a > b ? a : b;
}
// 为 string 重载
string max(const string& a, const string& b) {
cout << "string version\n";
return a > b ? a : b;
}
int main() {
cout << max(3, 5) << "\n";
cout << (, ) << ;
cout << (, ) << ;
;
}


