模板允許在不指定具體類型的情況下編寫通用代碼,編譯器根據實參類型自動生成具體代碼。分為**函數模板**與**類模板**。
template <typename T>
T max(T a, T b) { return a > b ? a : b; }
template <typename T> 宣告類型參數;max(3, 5) 時,編譯器推導 T 為 int,生成 int max(int, int)(**模板函數**);max(3.14, 2.71) 生成 double max(double, double)。關鍵區別:函數模板是「藍圖」,模板函數是編譯器實例化出的「實體代碼」。
template <typename T, int N>
class FixedArray {
T data[N];
public:
T& operator[](int i) { return data[i]; }
int size() const { return N; }
};
FixedArray<double, 10> arr; // 實例化為模板類
arr[0] = 3.14;
typename T)或**非類型參數**(如 int N);template class FixedArray<double, 10>; 強制生成,常用於庫的編譯單元分離;template <> class FixedArray<bool, 10> { /* 位壓縮實現 */ };typename 而非 class:語義更清晰,C++17 起 template <auto N> 更簡潔;模板是 C++ 泛型編程的核心,標準庫(STL)即建立於此。深入理解實例化機制、特化、參數推導,對編寫高效、可復用的現代 C++ 代碼至關重要。