模板允許在不指定具體類型的情況下設計函數或類,編譯器根據實參類型實例化生成具體代碼。分為函數模板和類模板。
template <typename T1, typename T2, ...>
返回類型 函數名(參數列表) {
// 函數體
}
typename 可替換為 class。調用時,編譯器根據實參類型推導模板參數,生成模板函數(實際的函數定義)。函數模板本身不佔用代碼空間,只有實例化後的模板函數才會生成機器碼。
template <typename T1, int N, typename T2>
class ClassName {
// 成員定義,可使用 T1, N, T2
};
typename/class)和非類型參數(如整型常量、指針、引用)。template <typename T1, int N, typename T2>
返回類型 ClassName<T1, N, T2>::MemberFunc(參數) {
// 函數體
}
ClassName<int, 10, double> obj; // 實參順序、類型必須與模板參數匹配
| 概念 | 定義 | 實體 |
|---|---|---|
| 函數模板 | 模板定義,含通用類型參數 | 模板函數(編譯器生成的具體函數) |
| 類模板 | 模板定義,非實際類 | 模板類(實例化後的具體類) |