C template 學習歸納2

2021-09-23 21:29:25 字數 1837 閱讀 4550

關於c++中的類模板,常見的形式為:

templateclass classname;
比如筆者在這裡舉乙個例子:

#include #include#include templateclass stack

};templatevoid stack::push(t const& a)

templatevoid stack::pop()

return elems.pop_back();

}templatet stack::top()const

return elems.back();

}int main()

從上面的**可以看出,為了定義成員函式,我們使用了下面的形式,比如:

templatevoid stack::push(t const& a)
本來在此處有乙個問題的,也就是關於類成員函式的實現位置的問題,這個問題我們稍後會提到。

現在我們為了測試上面的例子可以使用下面的函式**:

int main();
對於特化類模板而言,就如同編寫普通的類成員函式一樣,比如:

void mystack::pop(int const& a)
下面我們呢來看看類模板的區域性特化。

例如對於下面的**:

templateclass myclass;
而言,以下幾種像是的區域性特化都是正確 的:

//區域性特化 兩個引數一致

templateclass myclass;

//區域性特化 第二個為int

templateclass myclass;

//兩個引數都為指標型別

templateclass myclass;

在下面的例子中:

myclassmif; //將使用myclassmif; //將使用myclassmif;  //將使用myclassmp;  //將使用
大家要注意下面的錯誤**,

myclassm; 

myclassm;

z這兩個**在上面的這個例子中都是錯誤的。前者因為會和myclass產生二義性。後者會和myclass產生二義性、使得編譯器不知道應該匹配哪乙個。

如果想解決上面的第二個二義性的話,我們可以專門特化下面的**:

templateclass myclass;
接下來我們來看看預設模板引數:

我們先來看看**再說,大家注意和上面的例子進行比較:

#include #include#include #include #include template>

class stack

};templatevoid stack::push(t const& a)

templatevoid stack::pop()

return elems.pop_back();

}templatet stack::top()const

return elems.back();

}int main(){

try{

stackintstack;

stack> doustack;

//注意,這裡千萬不能寫下面的這一行**:

// stack> doustack;

intstack.push(1);

std::cout<

我們使用

stack> doustack;

來宣告了乙個double stack,他的內部使用的是std:

C template學習總結6

對於基本型別來說,並沒有乙個default模式來講他們初始化為有意義的值,沒有初始化的變數,其指都是未定義的,但是在模板這一塊呢?我們可以採用下面的形式 template void foo 對於class template我們可以採用下面例子的方式 template class myclass 通過...

c template學習總結3

和往常一樣,先來看一段 include template class stack bool full const constructor template stack stack numelems 0 start with no elements template void stack push t...

c template 5 x 學習總結

1.雙重模版引數,即模版的引數也是模版,不過只能用於類模版,函式模版中不能這麼使用 例如 template class cont std deque stack8 這裡注意首先 class cont不能寫typename cont 這個比較好理解,這是個類模版。其次給cont設定預設值 std de...