c++的模板的乙個有趣的地方是,模板可以有在模板中沒有引用到的引數。
如:
template
<
class
mystruct
,int n>
class
pointer
;
這裡有個n沒有引用到。這就引起了一些奇怪的問題。pointer 和pointer 既然是同乙個東西,這裡放個n有什麼意義呢?
這次,我們想做個雙向鍊錶。雙向鍊錶有兩個指標,所以要繼承pointer兩次。不幸的是c++的多重繼承不允許對同乙個類繼承兩次。所以用了個n來區分。這樣就可以了。
struct mystruct: pointer0>
, pointer1>
;
現在可以看一看效果:
int
main()
my[9]
.pointer1>
::p=0;
my[0]
.pointer0>
::p=0;
p.p =
&my[0]
;while
(p.p)
printf
("\n");
q.p =
&my[9]
;while
(q.p)
printf
("\n");
}
既然pointer和pointer代表同樣的東西,繼續琢摩一下它們之間的賦值運算是有趣的,它是乙個模板函式:
template
<
int m>
pointer &
operator=(
const pointer
&rhsp)
最後的**是這樣子:
#include
template
<
class
mystruct
,int id>
class
pointer};
struct mystruct: pointer0>
, pointer1>
;int
main()
my[9]
.pointer1>
::p=0;
my[0]
.pointer0>
::p=0;
p.p =
&my[0]
;while
(p.p)
printf
("\n");
q.p =
&my[9]
;while
(q.p)
printf
("\n");
}
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...