模板是 C++ 實現泛型程式設計的關鍵機制,允許以非特定資料類型定義類別或函數,於使用時再代入具體型別,大幅提升程式碼重用率。本文以淺顯語言解析類別模板與函數模板的基本語法與應用。
若無模板,相同邏輯卻需處理不同資料型別(如 int、float、char*)時,必須撰寫多個重載版本,導致程式碼冗餘。模板讓我們只寫一次邏輯,編譯器自動產生對應型別的程式碼。
關鍵字 template <class T> 配合 <> 符號宣告。以下範例展示一個可儲存任意型別資料的類別:
#include <iostream.h>
template <class T>
class MyClass {
T temp;
public:
MyClass(T name) { temp = name; }
T Vomit() { return temp; }
};
void main() {
MyClass<int> t1(2);
cout << t1.Vomit() << endl;
MyClass<char*> t2("醉拳");
cout << t2.Vomit() << endl;
MyClass<float> t3(3.14159);
cout << t3.Vomit() << endl;
}
若將成員函數定義移至類別外部,需加上模板前綴並指明類別名稱帶入型別參數:
template <class T>
T MyClass<T>::Vomit() { return temp; }
函數模板同樣以 template <class T> 開頭,編譯器依呼叫時的實際參數型別實例化:
#include <iostream.h>
template <class T>
void f(T qie) { cout << qie << endl; }
#define X f<char*>
void main() {
f<int>(3);
f<char>('r');
X("aadf");
}
執行結果將依序輸出 3、r、aadf,驗證同一函數模板可處理多種型別。
掌握 template <class T> 與 <T> 的搭配,即能靈活運用模板減少重複程式碼。進階主題如特化、偏特化、非型別參數等,留待後續深入探討。