概述
模板是 C++ 中实现参数化多态的编译期机制,通过类型参数抽象数据结构与算法,使同一份源码可被实例化为多个特化版本,从而达成零运行时开销的泛型复用。
为什么需要模板?
场景还原:重复代码问题
例如编写 Swap 函数:
void Swap(int& left, int& right) {
int temp = left;
left = right;
right = temp;
}
每新增一个类型,就需要复制一份代码。这不仅耗时间,还容易引入逻辑错误(如漏写赋值语句)。必须使用泛型来破障。
函数模板
语法结构
template<typename T>
void Swap(T& left, T& right) {
T temp = left;
left = right;
right = temp;
}
注意:typename 和 class 在此处等价。
隐式实例化
int totalCount = 42;
int anotherCount = 100;
Swap(totalCount, anotherCount); // 编译器生成 int 版 Swap
double memoryBlock = 3.14;
double dataChunk = 2.71;
Swap(memoryBlock, dataChunk); // 编译器生成 double 版 Swap
模板不占用栈或堆内存,它在编译期生成目标代码。
类型推演规则
int totalCount = 10;
double memoryBlock = 3.14;
// Swap(totalCount, memoryBlock); // 报错:T 无法推导为 int 或 double
模板拒绝隐式转换导致的歧义。
类模板
批量锻造法宝
传统做法需为每种物品建一个类。模板解法如下:
< ItemType>
{
:
ItemType* dataChunk;
capacity;
itemCount;
:
( cap = ) : (cap), () {
dataChunk = ItemType[capacity];
}
{
(itemCount < capacity) {
dataChunk[itemCount++] = item;
}
}
{
dataChunk[index];
}
};


