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

2021-06-02 19:03:41 字數 810 閱讀 9622

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後接說明符構成。在模板形參表中,這兩個關鍵字具有相同的含義,都指出後面所接的名字表示乙個型別。模板型別形參可作為型別說明符用在模板中的任何地方,與內建型別說明符或類型別說明符的使用方式完全相同。具體而言,它可以用於指定返回型別或...