一、函式模板
模板定義以關鍵字template開始,後跟乙個模板引數列表,在模板定義中,模板引數列表不能為空。
模板型別引數:型別引數前必須使用class或typename關鍵字。
非型別模板引數:表示乙個值而不是乙個型別
陣列引用形參:
//&arr兩端的括號必不可少
void print(int(&arr)[10
])}
//用於比較字串常量
//compare("hi","mom")
templateint compare(const
char(&p1)[n], const
char(&p2)[m])
乙個非型別引數可以是乙個整型,或者是乙個指向物件或函式型別的指標或引用。繫結到非型別整型引數的實參必須是乙個常量表示式。繫結到指標或引用非型別引數的實參必須具有靜態的生存期。我們不能用乙個普通(非static)區域性變數或動態物件作為指標或引用非型別模板引數的實參。指標引數也可以用nullptr或乙個值為0的常量表示式來例項化。
inline或constexpr說明符放在模板引數列表之後,返回型別之前。
template inline t min(const t&, const t&);
inline template t min(const t&, const t&);//出錯
通常,當我們呼叫乙個函式時,編譯器只需要掌握函式的宣告。類似地,當我們使用乙個類型別的物件時,類定義必須是可用的,但成員函式的定義不必已經出現。因此,我們將類定義和函式宣告放在標頭檔案中,而普通函式和類的成員函式的定義放在原始檔中。
為了生成乙個例項化版本,編譯器需要掌握函式模板或類模板成員函式的定義。所以函式模板和類模板成員函式的定義通常放在標頭檔案中。
模板與泛型程式設計
模板是泛型變成的基礎。泛型程式設計 編譯與型別無關的 是一種復用的方式,模板分為模板函式和模板類。模板函式是乙個通用的函式模板,而不是為每一種型別定義乙個新函式,乙個函式模板就像乙個公式,針對不同型別函式生成不同的函式版本。關鍵字 template 以 template 開始,後面跟乙個模板引數列表...
模板與泛型程式設計
泛型程式設計 編寫與型別無關的通用 是 復用的一種手段。模板是泛型程式設計的基礎。函式模板代表了乙個函式家族,該函式模板與型別無關,在使用時被引數化,根據實參型別產生函式的特定型別版本。模板的格式 template 返回值型別 函式名 引數列表 模板分為類模板和函式模板 模板它本身並不是函式,是編譯...
7 模板與泛型程式設計
understanding implicit inte ces and compile time polymorphism.編譯期多型 模板根據型別例項化 過載函式。執行期多型 執行時決定那個乙個virtual函式被呼叫。understand the two meanings of typename...