C 的模板 二 未用到的模板引數

2021-10-09 00:21:15 字數 1422 閱讀 4441

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...