C 中template的使用以及常見問題

2021-09-30 18:42:04 字數 1108 閱讀 1172

原文:

模板的宣告有兩種:template 或者template。雖然建議使用typename以避免二義性,但是這兩種實際上是都可以的。

模板只作用於其下方的乙個類或者函式,所以在類外實現成員函式時要對每乙個函式都在之前進行模板的宣告(即使如果這個函式沒有用到這個模板型別,但是類名裡也要加上)

與普通函式和類不同,模板函式或類在其他類作為友元之前必須先進行宣告(不用定義,宣告即可),否則無法通過編譯,例如:

templateclass binarytree;

templateclass binarytreenode {//define the node of binary tree

friend class binarytree;

//friend class binarysearchtree;

如果不加入第一行,則無法通過編譯。

在同乙個類或者函式中可以使用多個模板,放在一條語句中宣告即可:template。

模板類和函式在例項化時。注意不能使用new語句,而應採用 類名《具體型別名》具體類或者函式的名稱。這一點在初學時很容易犯。

在同乙個檔案的不同類中可以使用多個模板,例如對class a,我們使用了模板t1,對於class b,我們可以使用模板t2,完全沒有問題。不僅如此,在例項化時,可以把乙個類的模板型別例項化為另乙個模板類或者與其有關的型別。例如,定義鏈佇列類時:

template class linkqueuenode {
定義二叉樹類時:

templateclass binarytree {
而在二叉樹的乙個成員函式中,我們可以使用:

void binarytree::levelorder(binarytreenode*root)

{ /*二叉樹的層序遍歷*/

linkqueue*>tqueue;//鏈佇列,節點型別為二叉樹節點指標型別

注意這裡把鏈佇列的型別例項化為了二叉樹節點類指標的型別!這樣,在最後將二叉樹型別例項化時,使用鏈佇列物件就完全沒有問題。

對於使用了模板的類要注意,定義成員函式時,型別名之後都要加,其他和普通成員函式的定義完全一樣,尤其在類外定義時不要出錯。

C 中 模板Template的使用

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

C 中的 template 類使用

在c 中為了節省工作量,出現了一種模板類。可以多次重寫。1 在c template中很多地方都用到了typename與class這兩個關鍵字,而且好像可以替換,是不是這兩個關鍵字完全一樣呢?答 class用於定義類,在模板引入c 後,最初定義模板的方法為 template,這裡class關鍵字表明t...

C 中template(模版)的使用

我們在程式設計的時候總是會遇到一些類似的模組,只是模組中的形參的資料型別不同,導致我們要不斷的去更改模組的。這裡就涉及到過載的知識點了。例如以下的幾種情況 函式1.int max int x,int y 函式2.float max float x,float y 函式3.double max dou...