STL程式設計實踐五:巢狀式的型別宣告 (轉)

worldblog發表於2007-12-09
STL程式設計實踐五:巢狀式的型別宣告 (轉)[@more@]

 

 

STL設計實踐五:巢狀式的型別宣告:namespace prefix = o ns = "urn:schemas--com::office" />

E –

前言

  STL是泛型程式設計的一個研究成果。在泛型程式設計中巢狀式的型別宣告是其的慣用手法,它利用了typedef關健字。”STL程式設計實踐四”中我們對該關健字的用途做了些簡單介紹。這裡說一下利用typedef關健字在泛型程式設計中進行巢狀式的型別宣告。也算是對”STL程式設計實踐四”的補充,請別見笑。歡迎批評指正。

正文

  巢狀式的型別宣告聽起來好像很複雜,其實很簡單,舉個例子:

  template

  struct Ctype

{

  typedef T value_type;   //這就是巢狀式的型別宣告

};

  簡單吧!但它在泛型程式設計中佔有很重要的地位,主要是用來獲取Template引數的原始型別,下面就說個不太恰當的例子(注:不恰當不是說語法不對,只是指這個例子有沒有用,或有沒有必要這樣寫等)。

  template

  struct Ctype

{

  typedef T value_type;  //巢狀式的型別宣告

};

  template

  struct Ctype    //偏特化

{

  typedef T value_type;  //巢狀式的型別宣告

};

  ……

  template

  typename Ctype::value_type

  func(T t)

{

  ……

}

  ……

  int *pi = new int(10);

  int iresult = func(pi);

  這段簡單的程式中就使用了巢狀式的型別宣告,函式func希望返回T引數的原始型別(在這裡是int),當func的模板引數為int*時T型別是int*,所以函式func不能直接返回型別T。透過返回Ctype::value_type在這就可以得到你想要的效果,這裡利用了traits技術。當引數為int*時Ctype::value_type在這裡的型別就是int。

  大家能看明白嗎?希望對大家有幫助,不明白或有錯誤請來信,謝謝你們先!

 

            2001-11-28晚

 

 

 

 

 

 

 


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

相關文章