模板與泛型程式設計

2022-03-17 18:51:39 字數 954 閱讀 1969

一、函式模板

模板定義以關鍵字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...