(1)定義函式模板(function template)
函式模板是乙個獨立於型別的函式,可以產生函式的特定型別版本。
// implement strcmp-like generic compare function模板定義以關鍵字template開始,後接尖括號括住的模板形參表。template int compare(const t &v1, const t &v2)
模板形參可以是表示型別的型別形參(type parameter),也可以是表示常量表示式的非型別形參(nontype parameter)。上面程式中的t是型別形參。
// compiler instantiates int compare(const int&, const int&)使用函式模板時,編譯器會將模板實參繫結到模板形參。編譯器將確定用什麼型別代替每個型別形參,用什麼值代替每個非型別形參,然後產生並編譯(稱為例項化)該版本的函式。cout << compare(1, 0) << endl;
// compiler instantiates int compare(const string&, const string&)
string s1 = 「hi」, s2 = 「world」;
cout << compare(s1, s2) << endl;
上面的例子中,編譯器用int代替t建立第乙個版本,用string代替t建立第二個版本。
函式模版不支援返回值
(2)定義類模板(class template)
在定義的類模板中,使用模板形參作為型別或值的佔位符,在使用類時再提供具體的型別或值。
template class queue與呼叫函式模板不同,使用類模板時,必須為模板形參顯示指定實參。;
queue qi; //queue that holds ints
queue qs; //
queue that holds strings
C 模板與泛型程式設計
1 物件導向程式設計總是以顯式介面和執行時多型解決問題。模板及泛型世界不同,在此世界中顯式介面和執行時多型仍然存在,但重要性降低,反倒是隱式介面和編譯器多型移到前頭。執行時多型和編譯時多型 前者表示哪乙個虛函式該被繫結,後者表示哪乙個過載函式該被呼叫。顯式介面由函式的簽名式 函式名稱 引數型別 返回...
模板與泛型程式設計
模板是泛型變成的基礎。泛型程式設計 編譯與型別無關的 是一種復用的方式,模板分為模板函式和模板類。模板函式是乙個通用的函式模板,而不是為每一種型別定義乙個新函式,乙個函式模板就像乙個公式,針對不同型別函式生成不同的函式版本。關鍵字 template 以 template 開始,後面跟乙個模板引數列表...
模板與泛型程式設計
泛型程式設計 編寫與型別無關的通用 是 復用的一種手段。模板是泛型程式設計的基礎。函式模板代表了乙個函式家族,該函式模板與型別無關,在使用時被引數化,根據實參型別產生函式的特定型別版本。模板的格式 template 返回值型別 函式名 引數列表 模板分為類模板和函式模板 模板它本身並不是函式,是編譯...