參考:
c++ 中模板使用詳解
c++模板詳解
為了避免因過載函式定義不全面而帶來的呼叫錯誤,引入了模板機制
模板是c++支援引數化多型的工具,使用模板可以使使用者為類或者函式宣告一種一般模式,使得類中的某些資料成員或者成員函式的引數、返回值取得任意型別。
類模板
template 返回型別 函式名(引數列表)
說明: template是乙個宣告模板的關鍵字,表示宣告乙個模板關鍵字class不能省略,可以用typename 代替。<>括號中的引數叫模板形參
一但宣告了模板函式就可以用模板函式的形參名宣告類中的成員變數和成員函式,即可以在該函式中使用內建型別的地方都可以使用模板形參名
模板形參需要呼叫該模板函式時提供的模板實參來初始化模板形參,一旦編譯器確定了實際的模板實參型別就稱他例項化了函式模板的乙個例項。比如swap的模板函式形式為
template void swap(t &a,t &b){}
注意:不能在函式呼叫的引數中指定模板形參的型別,對函式模板的呼叫應使用實參推演來進行。
template< class 形參名, class 形參名,...> class 類名
;
類模板和函式模板都是以template開始後接模板形參列表組成,模板形參不能為空,一但宣告了類模板就可以用類模板的形參名宣告類中的成員變數和成員函式,即可以在類中使用內建型別的地方都可以使用模板形參名來宣告。
templateclass a;
在類a中宣告了兩個型別為t的成員變數a和b,還宣告了乙個返回型別為t帶兩個引數型別為t的函式hy。
比如乙個模板類a,則使用類模板建立物件的方法為am;在類a後面跟上乙個<>尖括號並在裡面填上相應的型別,這樣的話類a中凡是用到模板形參的地方都會被int 所代替。當類模板有兩個模板形參時建立物件的方法為am;型別之間用逗號隔開。
注意:對於類模板,模型的形參的型別必須在形參列表中指定,類模板形參不存在實參推演的問題
template《模板形參列表》 函式返回型別 類名《模板形參名》::函式名(引數列表)
類模板,模板類和函式模板,模板函式
單整數類 雙整數類 所以c艹跟其他強型別語言為我們提供了乙個所謂模版功能 變數型別 整數 類模板的重點是模板。表示的是乙個模板,專門用於產生類的模子。例子 1 template 2 class vector 3 使用這個vector模板就可以產生很多的class 類 vector vector ve...
C 函式模板和類模板
一 函式模板 c 提供了函式模板 function template 所謂函式模板,實際上是建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表。這個通用函式就稱為函式模板。凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義一次即可。在呼叫函式時系統會...
函式模板和類模板(C )
所謂函式模板,實際上是建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表。這個通用函式就稱為函式模板。函式模板和普通函式的區別 函式模板不允許自動型別轉化,普通函式能夠進行自動型別轉換 函式模板和普通函式在一起呼叫的規則 1 函式模板可以像普通函式一樣被過載 2 c 編譯器優先...