写 C++ 难免跟模板打交道。它是泛型编程的基石,让你写出类型无关的代码,代价为零运行时开销——因为实例化在编译期就完成了。
从重载到模板
考虑一个求最大值的函数,想支持 int、double 和 string。用函数重载的话,每个类型都要写一份类似的逻辑。
#include <iostream>
#include <string>
using namespace std;
int max(int a, int b) {
cout << "int version\n";
return a > b ? a : b;
}
double max(double a, double b) {
cout << "double version\n";
return a > b ? a : b;
}
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 << max(3.14, 2.7) << "\n";
cout << max("hello", "world") << "\n";
return 0;
}


