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

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

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

2020-01-26 15:23:54
字體:
來源:轉載
供稿:網友

模板特例化是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類型,而另一個參數仍未綁定需要由用戶指定。注意,一個類模板的部分特例化版本仍然是一個模板,因為使用它時用戶還必須為那些在特例化版本中未指定的模板參數提供實參

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 六盘水市| 南京市| 兴海县| 泽普县| 新绛县| 桐城市| 河东区| 邵阳县| 鹤峰县| 南和县| 新宁县| 石城县| 霞浦县| 闽侯县| 梨树县| 陵水| 眉山市| 修武县| 子洲县| 民和| 开江县| 定远县| 青海省| 海伦市| 铅山县| 任丘市| 邵武市| 广元市| 美姑县| 南康市| 双江| 甘肃省| 南投市| 原平市| 普安县| 若羌县| 新龙县| 鄂托克前旗| 赤城县| 枣阳市| 宕昌县|