物件導向程式設計(oop)和泛型程式設計都能處理在編寫程式時不知道型別的情況。不同之處在於:oop能處理型別在程式執行之前都未知的情況;而在泛型程式設計中,在編譯時就能獲知型別了。模板和泛型非常重要,比如在stl中vector等都是泛型程式設計,先說說函式模板。
使用template
關鍵字可以定義函式模板,例如:
template
int compare(const t&v1, const t&v2)
int main()
編譯器將根據實參來推斷需要例項化的不同模板,比如,上述例項化的兩個版本分別是:
int compare(const
int &v1,const
int &v2){}
int compare(const
double &v1,const
double &v2){}
用來指定模板引數,該引數除了可以表示引數型別以外,還可以表示返回型別,變數宣告,型別轉換。
在之前的部落格中提到了c++模板不能支援分離式編譯,即模板的宣告和定義必須在同乙個檔案中。
模板定義並不生成**,只有當例項化乙個模板的特例的時候,編譯器才生成**,為了生成乙個例項化的版本,編譯器需要掌握函式模板或類模板成員函式的定義,因此在標頭檔案中既要包括宣告又要包括定義。
C 模板與泛型程式設計
1 物件導向程式設計總是以顯式介面和執行時多型解決問題。模板及泛型世界不同,在此世界中顯式介面和執行時多型仍然存在,但重要性降低,反倒是隱式介面和編譯器多型移到前頭。執行時多型和編譯時多型 前者表示哪乙個虛函式該被繫結,後者表示哪乙個過載函式該被呼叫。顯式介面由函式的簽名式 函式名稱 引數型別 返回...
C 模板(泛型)
模板概念 模板是建立通用模具,大大提高復用性,將型別引數化。c 泛式程式設計思想,主要利用的技術就是模板 c 提供模板機制 函式模板和類模板 函式模板和類模板區別 類模板沒有自動型別推導使用方式 類模板在模板引數列表中可以有預設引數 作用 建立通用函式,其函式返回值型別和形參型別可以不具體制定,用乙...
C 模板與泛型程式設計(3)
普通 非模板 類的成員模板 我們設計乙個類,包含乙個過載的函式呼叫運算子,它接受乙個指標並對此指標執行delete。與預設刪除器不同,我們還在刪除器被執行時列印一條資訊。class debugdelet 與任何函式模板一樣,t的型別有編譯器推斷 template void operator t p ...