第16章 模板與泛型程式設計 3

2021-09-30 10:03:47 字數 839 閱讀 7846

16.1.3 模板型別形參

型別形參由關鍵字class或typename後接說明符構成。在模板形參表中,這兩個關鍵字具有相同的含義,都指出後面所接的名字表示乙個型別。

模板型別形參可作為型別說明符用在模板中的任何地方,與內建型別說明符或類型別說明符的使用方式完全相同。具體而言,它可以用於指定返回型別或函式形參型別,以及在函式體中用於變數宣告或強制型別轉換。

templatet &method1(const t &t)

1. typename與class的區別

在函式模板形參表中,關鍵字typename和class具有相同含義,可以互換使用,兩個關鍵字都可以在同一模板形參表中使用。

關鍵字typename是作為標準c++的組成部分加入到c++中的,因此舊的程式更有可能只用關鍵字class。

2. 在模板定義內部指定型別

templateint method2(t &t)

vectorvec;

cout<

如果希望編譯器將size_type當作型別,則必須顯式告訴編譯器這樣做。

通過在成員前加上關鍵字typename作為字首,可以告訴編譯器將成員當作型別。當然,這一宣告給例項化模板函式增加了乙個職責:那些型別必須具有名為size_type的成員,而且該成員是乙個型別。

如果拿不準是否需要以typename指明乙個名字是乙個型別,那麼指定它是個好主意。在型別之前指定typename沒有害處,因此,即使typename是不必要的,也沒有關係。

templateint method2(t &t)

第16章 模板與泛型程式設計 10

16.4.4 queue和queueitem的友元宣告 1.將類模板設為友元 template class queueitem type item queueitem next friend class queue 2.queue輸出操作符 template ostream operator ost...

第16章 模板與泛型程式設計 13

16.5 乙個泛型控制代碼類 16.5.1 定義控制代碼類 ifndef handle h define handle h include stdafx.h include using namespace std templateclass handle t operator t operator ...

第16章 模板與泛型程式設計 15

16.6.2 類模板的特化 1.定義類特化 template class queue const string front const void push const char void pop bool empty const friend ostream operator ostream os,...