C 中的模板(上)

2021-07-31 13:22:39 字數 1517 閱讀 6551

模板是c++支援引數化多型的工具,使用模板可以使使用者為類或者函式宣告一種一般模式,使得類中的某些資料成員或者成員函式的引數、返回值取得任意型別。

模板是一種對型別進行引數化的工具;通常有兩種形式:函式模板和類模板;函式模板針對僅引數型別不同的函式;類模板針對僅資料成員和成員函式型別不同的類。

使用模板的目的就是能夠讓程式設計師編寫與型別無關的**。比如編寫了乙個返回型別為int引數為int的add函式,這個函式就只能實現int 型,對double,字元這些型別無法實現,要實現這些型別的加法就要重新編寫另乙個add函式。使用模板的目的就是要讓這程式的實現與型別無關,比如乙個add模板函式,即可以實現int 型,又可以實現double型的加法。模板可以應用於函式和類。

<1>函式模板:代表了乙個函式家族,該函式與型別無關,在使用是被引數化,根據實參型別產生函式的特定模板。

template t add(t left,t right)

int main()

上面的**中,模板被編譯了兩次:

例項化之前,檢查模板**本身,檢視是否會出現語法錯誤,如:遺漏分號

例項化期間,檢查模板**,檢視是否所有的呼叫都有效,如:例項化不支援某些函式呼叫。

cout

<2.3,(int)4.5)/如果你呼叫函式是對引數進行型別轉化,就會報錯。

注意:模板函式在推演時不支援型別轉化。

<2>模板引數

函式模板有兩種型別引數:模板引數和呼叫引數。

模板形參又分為:型別形參和費型別形參。

所有模板形參的前面必須加class或者typename關鍵字。

注意:在函式模板內部不能定義預設的模板實參。

<3>非型別的模板引數

非型別的模板引數是模板內部定義的敞亮,在需要常量表示式的時候,可以使用非型別的模板引數。如下例子。

<4>模板函式的過載

模板函式是可以支援過載的,下面舉例說明。

template

t max(const t& left,const t& right)

template

//每次定義函式模板時都應該定義這句話

t max(const t&a,const t&b,const t&c)

int main()

{ cout

<2,3)

<2,3,4)

(2.0,4.0)

<2.0,4.0)注意:函式的所有過載版本的宣告都應該位於該函式被呼叫位置之前。

特化格式:template<>

返回值 函式名

template

<>

int complare (int)//這樣當你需要什麼型別的函式就可以自己定義了。

//注意:在呼叫的時候,實參型別必須與特化版本函式的形參型別完全匹配。

C 中的模板

模板 template 利用一種完全通用的方法來設計函式或類而不必預先說明將被使用的每個物件的型別,利用模板功能可以構造相關的函式或類的系列,因此模板也可稱為引數化的型別。在c 語言中,模板可分為類模板 class template 和函式模板 function template 函式模板 通過前面...

C 中的模板

1 什麼是模板?模板是一種不關注輸入 輸出資料型別,只關注資料處理相關演算法實現的程式設計,也稱為泛程式設計。自定義模板是開放人員根據需要設計的模板,其模板的編碼工作由開發人員完成,而標準模板是使用系統自帶的標準模板庫 stl 其模板的實現 不需要自己完成,開放人員可以直接使用。2 模板定義有何規則...

C 中的模板

c 中的模板大致分兩類 函式模板和類模板。模板的框架都是在函式前或者類前寫上 template 模板的實質為 將資料型別當引數傳遞,實現資料型別與演算法相分離。函式模板 函式模板 模板函式 函式模板 其呼叫的方式有隱式呼叫,即由編譯器自己推導,和宣告型別如myswap a,b 函式模板的機制 當宣告...