国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++模板特例化應用實例

2020-05-23 14:22:09
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了C++模板特例化應用實例,是非常重要的一個概念,需要的朋友可以參考下
 
 

模板特例化是C++程序設計中一個非常重要的應用,本文就以實例形式對其進行分析,相信對大家進一步理解C++程序設計能夠帶來一定的幫助。具體內容如下:

首先,模板是C++中一個很重要的特性,寫一份代碼能用于多種數據類型(包括用戶自定義類型)。例如,STL的sort()函數可以用于多種數據類型的排序,類stack可以用作多種數據類型的棧。但是,如果我們想對特定的數據類型執行不同的代碼(而不是通用模板)呢?這種情況下就可以使用模板特例化(template specialization)。

一、函數模板特例化

當特例化一個函數模板時,必須為原模板中的每個模板參數都提供實參。使用關鍵字template后跟一個空尖括號<>,即template <>,以指出我們正在特例化一個模板。

template <typename T> void fun(T a) {   cout << "The main template fun(): " << a << endl; }  template <>  // 對int型特例化 void fun(int a) {   cout << "Specialized template for int type: " << a << endl; }  int main() {   fun<char>('a');   fun<int>(10);   fun<float>(9.15);   return 0; } 

輸出結果:

The main template fun(): a Specialized template for int type: 10 The main template fun(): 9.15 

對于除int型外的其他數據類型,都會調用通用版本的函數模板fun(T a);對于int型,則會調用特例化版本的fun(int a)。注意,一個特例化版本的本質是一個實例,而非函數的重載。因此,特例化不影響函數匹配。

二、類模板特例化

除了特例化函數模板,我們還可以特例化類模板。下面是一個簡單的例子:

template <typename T> class Test{ public:   void print(){     cout << "General template object" << endl;   } };  template<>  // 對int型特例化 class Test<int>{ public:   void print(){     cout << "Specialized template object" << endl;   } };  int main() {   Test<int> a;   Test<char> b;   Test<float> c;   a.print();   b.print();   c.print();   return 0; }

輸出結果:

Specialized template object General template object General template object

另外,與函數模板不同,類模板的特例化不必為所有模板參數提供實參。我們可以只指定一部分而非所有模板參數,這種叫做類模板的偏特化 或部分特例化(partial specialization)。例如,C++標準庫中的類vector的定義:

template <typename T, typename Allocator> class vector {   /*......*/ };  // 部分特例化 template <typename Allocator> class vector<bool, Allocator> {   /*......*/ };

在vector這個例子中,一個參數被綁定到bool類型,而另一個參數仍未綁定需要由用戶指定。注意,一個類模板的部分特例化版本仍然是一個模板,因為使用它時用戶還必須為那些在特例化版本中未指定的模板參數提供實參


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柘荣县| 鲁山县| 龙游县| 绍兴县| 抚宁县| 盱眙县| 清流县| 卓尼县| 边坝县| 通海县| 桦川县| 灵宝市| 平罗县| 吉林省| 清水河县| 柳林县| 赤水市| 绥芬河市| 濉溪县| 汉寿县| 岚皋县| 正定县| 万载县| 旬阳县| 海伦市| 高要市| 张北县| 涡阳县| 永年县| 砀山县| 兴化市| 英吉沙县| 尚义县| 工布江达县| 临城县| 白河县| 崇礼县| 汉川市| 谷城县| 金阳县| 聂拉木县|