c 模板 包含本身就是模板的引數

2021-07-10 01:27:59 字數 1636 閱讀 2340

模板可以包含型別引數(如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...