程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 第16章 模板與泛型編程(15)

第16章 模板與泛型編程(15)

編輯:C++入門知識

16.6.2 類模板的特化

1. 定義類特化

template<> 
class Queue<const char*>{ 
public: 
    string& front() 
    {return real_queue.front();} 
    const string &front() const{return real_queue.front();} 
    void push(const char*); 
    void pop(); 
    bool empty() const 
    {return real_queue.empty();} 
    friend ostream &operator<< <const char*>(ostream &os, const Queue<const char*> &q); 
private: 
    Queue<string> real_queue; 
}; 
template<>
class Queue<const char*>{
public:
 string& front()
 {return real_queue.front();}
 const string &front() const{return real_queue.front();}
 void push(const char*);
 void pop();
 bool empty() const
 {return real_queue.empty();}
 friend ostream &operator<< <const char*>(ostream &os, const Queue<const char*> &q);
private:
 Queue<string> real_queue;
};

特化可以定義與模板本省完全不同的成員。如果一個特化無法從模板定義某個成員,該特化類型的對象就不能使用該成員。類模板成員的定義不會用於創建顯式特化成員的定義。

類模板特化應該與它所特化的模板定義相同的接口,否則當用戶試圖使用未定義的成員時,會感到奇怪。

2.類特化定義

在類特化外部定義成員時,成員之前不能加template<>標記。

void Queue<const char*>::push(const char* val) 

    return real_queue.push(val); 

void Queue<const char*>::push(const char* val)
{
 return real_queue.push(val);
}
16.6.3 特化成員而不特化類

template<> 
void Queue<const char*>::pop() 

    QueueItem<const char*> *p=head; 
    delete head->item; 
    head=head->next; 
    delete p; 

template<>
void Queue<const char*>::pop()
{
 QueueItem<const char*> *p=head;
 delete head->item;
 head=head->next;
 delete p;
}成員特化的聲明與任何其他函數模板特化一樣,必須以空的模板形參表開頭。

template<> 
void Queue<const char*>::pop(); 

 摘自 xufei96的專欄
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved