C++模板的定製五:對定製成員函式的補充 (轉)

worldblog發表於2007-12-09
C++模板的定製五:對定製成員函式的補充 (轉)[@more@]

C++模板的定製五:對定製成員的補充:namespace prefix = o ns = "urn:schemas--com::office" />

作者:袁小凱

華南理工大學研究所北區研發二部

E –

 

前言

在” C++模板的定製四:定製成員函式和預設類參 “一文中我簡單介紹了模板類中成員函式的定製(全特化),但是有一細節還是說清楚的好,以免大家誤解。在C++中不能區域性定製模板類中的成員函式。再說一下模板類中的模板成員函式的用法。希望對大家有幫助。

一、  定製模板類中的成員函式

在” C++模板的定製四:定製成員函式和預設類參 “中說了可以定製模板類中的成員函式。這時你會不會認為下例也應該可以。

template

class classname

{

  public:

    classname(T t):_val(t){}

~classname(){}

void display(P p);

private:

T _val;

};

定製模板類中的成員函式void display(P p):

template

void classname:: display(char* p)

{

  if(NULL==_val)

cout<

else

cout<<_val>

……

}

  很對不起!這樣是不行的,我真的希望能行,我開始時認為如果可以這樣寫多好。但事實上的確不可以。我也不知道為什麼,但我很想知道,如果那位大俠能告知,在下萬分感謝!記住吧,不要再犯我同樣的錯誤。^_^

二、  模板類中的模板成員函式

當我們得到了模板類的好處後,還希望能使用模板成員函式,下面就簡單的做一下介紹。假設有個模板類中需要一個加法函式可以處理任何型別。

template

class classname

{

  template

  I1 add (I1 i1,I2 i2)

{

  return ….;

}

};

上例中add成員函式就是個模板類中的模板成員函式。但當你不內聯時該如何寫呢?如果你在VC上試的話,你會永遠都得不到正確的結果,因為它不支援。正確的寫法如下:

template

template

I1 classname::add(I1 i1,I2 i2)

{

  ……

}

這是C++標準的寫法,請不要說有沒有必要,你知道總比不知道的好,不是嗎?好了,不說了,希望能對你有所幫助。文章寫的倉促,有錯別字或錯誤請大家多批評指出。歡迎和大家交流。

 

  2001-11-24


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990426/,如需轉載,請註明出處,否則將追究法律責任。

相關文章