c 中的模板template

2021-08-20 03:08:33 字數 1158 閱讀 5513

1.定義乙個模板:template,其中關鍵字typename可以換成class,t為自定義的型別名稱。

template t>  

void swap(t &a, t &b)

2.過載乙個模板(和上面一起定義的時候):

template void swap(t* a, t* b)
3.對於具體的方法名,可以有三種過載版本:

其中,顯示具體化中版本中的是可以省略的,而且可以看出,在我寫的顯示具體化的方法和非模板方法的兩個版本,其實實際的意思都是一樣的,我也不知道它們有什麼具體的區別(當然它們的優先順序是不一樣的)。對於以上三種過載版本的,編譯器在選擇呼叫的方法時,優先順序會是:①非模板函式②顯示具體化③模板函式。只有在找不到優先順序高的方法才會往優先順序低的方法中尋找。

4.模板例項:在**中包含函式模板本身並不會生成函式定義,只是乙個生成函式的方案,編譯器使用模板為特定型別生成函式定義時,得到的是模板例項。例如上面的呼叫swap(a,b)編譯器就會生成乙個swap()的例項,該例項使用int,這種方法叫隱式例項化。模板不是函式定義,而使用int的模板例項才是函式定義。

5.顯式例項化:直接命令編譯器生成特定的例項,語法為template void swap(int, int)。該宣告的意思是「使用swap()模板生成int型別的函式定義」。

6.顯示具體化:template <> void swap(int &, int &)。表明「使用專門為int型別顯式定義的函式定義,而不使用類似顯示例項化中使用swap模板來生成int型別的函式定義」。

7.呼叫方法:在呼叫方法的時候會遵守上述提及過的優先順序問題,在同乙個優先順序,編譯器會選出最合適,引數最匹配的方法進行呼叫(具體細節不在此陳述)。當然你也可以使用顯式例項化來呼叫你想呼叫的方法:

template t lesser(t a, t b)  

int lesser(int a, int b)

如果呼叫的時候使用lesser(a,b),表明指定呼叫模板函式的版本,否則就會預設使用非模板函式的版本。

未完待續

C 中的模板template

函式模板例項1如下 include using namespace std 函式模板 templatevoid swap t a,t b int main 函式模板例項2如下 include using namespace std 函式模板的宣告 templatet max t a,t b,t c ...

C 中 模板Template的使用

1 在c template中很多地方都用到了typename與class這兩個關鍵字,而且好像可以替換,是不是這兩個關鍵字完全一樣呢?答 class用於定義類,在模板引入c 後,最初定義模板的方法為 template,這裡class關鍵字表明t是乙個型別,後來為了避免class在這兩個地方的使用可能...

C 中 模板Template的使用

類模板與模板類的概念 1.什麼是類模板 乙個類模板 也稱為類屬類或類生成類 同意使用者為類定義一種模式。使得類中的某些資料成員 默寫成員函式的引數 某些成員函式的返回值,能夠取隨意型別 包含系統提前定義的和使用者自己定義的 2.類模板定義 定義乙個類模板,一般有雙方面的內容 a.首先要定義類,其格式...