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, const queue&q);
private:
queuereal_queue;
};
特化可以定義與模板本省完全不同的成員。如果乙個特化無法從模板定義某個成員,該特化型別的物件就不能使用該成員。類模板成員的定義不會用於建立顯式特化成員的定義。
類模板特化應該與它所特化的模板定義相同的介面,否則當使用者試圖使用未定義的成員時,會感到奇怪。
2.類特化定義
在類特化外部定義成員時,成員之前不能加template<>標記。
void queue::push(const char* val)
16.6.3 特化成員而不特化類
template<>
void queue::pop()
成員特化的宣告與任何其他函式模板特化一樣,必須以空的模板形參表開頭。
template<>
void queue::pop();
這些宣告應放在queue類的標頭檔案中。
第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章 模板與泛型程式設計 3
16.1.3 模板型別形參 型別形參由關鍵字class或typename後接說明符構成。在模板形參表中,這兩個關鍵字具有相同的含義,都指出後面所接的名字表示乙個型別。模板型別形參可作為型別說明符用在模板中的任何地方,與內建型別說明符或類型別說明符的使用方式完全相同。具體而言,它可以用於指定返回型別或...