模板可以包含型別引數(如typename t)和非型別引數(如 int n)。模板還可以包括本身就是模板類的引數。這種引數是模板新增的特性,用於實現stl。
模板引數格式為 templateclass thing .
我們使用模板,就是為了泛型程式設計,如使用型別引數 typename t,就能實現相同演算法下不同型別引數的統一程式設計。
如要實現兩個數的互換,按c語言的做法,要先知道這兩個數是int 型的,char型的,還是double型的,要編三個函式,過載函式。但如果用到 型別引數,直接用 t 代替int或char或double,就可以減少程式設計量,達到重用**的目的。
而模板引數為 類模板 ,也是泛型程式設計的目的。試想一下,在乙個類中,可呼叫乙個系列的類,是不是很酷?只要這乙個系列的類都有著我們需要的特徵,那麼我們就能通過使用乙個模板類來使用它們,重用**!
模板引數的格式為templateclass thing. 其中, templateclass 為型別, thing為引數。
我被這句話搞混了好一會兒。mb,直接跟我說怎麼理解它不就得了。我們逆向去理解它。記住它是乙個模板類,它的格式應為
class thing;
對比上面的格式,推測出 只要某個 模板類 的模板引數為,那麼這個模板類就可以作為 該 模板 的引數。
c++除了stl思想外,其它都是狗屁。(c程式設計師)
/* stacktp.h */
#ifndef stacktp_h_
#define stacktp_h_
template class stack
; type items[max];
int top;
public:
stack();
bool isempty();
bool isfull();
bool push(const type & item);
bool pop(type & item);
};template stack::stack()
template bool stack::isempty()
template bool stack::isfull()
template bool stack::push(const type &item)
else
return false;
}template bool stack::pop(type & item)
else
return false;
}#endif
/* main.cpp */
#include#include"stacktp.h"
using namespace std;
template class thing>
class crab
; bool push(int a, double x)
bool pop(int &a,double &x)
};int main()
while(nebula.pop(ni,nb))
cout<< ni <<", "<< nb
return 0;
}
我沒做注釋,不好意思了啊。
C 模板模板引數
c 模板的使用一共有以下幾種情況。而本篇介紹模板模板引數。模板引數就是模板的引數,我們一般指定為t型別,實際上可以使用任何的名字,例如指定乙個foo的模板引數 temlate foo calc const foo a,const foo b 而模板模板引數則是模板的引數又是乙個模板,例如 templ...
C 模板模板引數
模板引數就是模板的引數,我們一般指定為t型別,實際上可以使用任何的名字,例如指定乙個foo的模板引數 temlate foo calc const foo a,const foo b 而模板模板引數則是模板的引數又是乙個模板,例如 templatetypename container class x...
玩轉c 模板模板引數
include include include include using namespace std if 1 case1 不使用模版模版引數,明確指定容器的型別,比如stl庫的stack實現,見下 template typename t,typename cont std deque class...