日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

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

解讀C++編程中類模板的三種特化

2020-05-23 14:11:15
字體:
供稿:網(wǎng)友
這篇文章主要介紹了C++編程中類模板的三種特化,需要的朋友可以參考下
 

1.類模板顯式特化
為了進(jìn)行特化,首先需要一個通用的版本,稱主模板.主模板使用了標(biāo)準(zhǔn)庫堆算法.  堆 是一種線性化的樹形結(jié)構(gòu),將一個值壓入一個堆中, 實(shí)際上等于將該值插入到一個樹形結(jié)構(gòu)中;將一個值從堆中取出就等于移除并返回堆中最大值.但在處理字符的指針時會碰釘子.堆將按照指針的值進(jìn)行組織. 我們可以提供一個顯式特化版本解決此問題(例1)如果希望除了一個針對const char*的Heap外,還希望提供一個針對char *的Heap;(例2)

//主模板template <typename T>class Heap{private:  std::vector<T> h_;public:  void push(const T& val);  T pop();  bool empty() const //const聲明在末尾表示該函數(shù)不能修改類變量  {    return h_.empty();  }}template <typename T>void Heap<T>::push(const T& val){  h_.push_back(val);  std::push_heap(h_.begin(),h_.end());}template <typename T>T Head<T>::pop(){  std::pop_head(h_.begin(),h_.end());  T tmp(h_.back());  h_.pop_back();  return tmp;}

例1

//顯示特化版本/*********************************************** *     可以看到模板參數(shù)列表是空的,其實(shí)這根本不是一個模 *  板. 因?yàn)闆]有指定任何模板參數(shù).所以模板的顯式特化又被 *  稱作"完全特化". *     Heap<const char*> 完全特化,不會導(dǎo)致模板的實(shí)例化; *     Heap<int> 特化,會導(dǎo)致模板的實(shí)例化; *     編譯器根據(jù)主模板的聲明來檢查類模板特化.***********************************************/template<>//注意,無任何參數(shù),當(dāng)然,它本來就不是一個模板class Head<const char *>{private:  std::vector<const char *> h_;public:  void push(const char *pval);  const char * pop();  bool empty() const //const聲明在末尾表示該函數(shù)不能修改類變量  {    return h_.empty();  }};//再次提醒, Head<const char *>不是一個模板void Heap<const char*>::push(const char *pval){  h_.push_back(pval);  std::push_heap(h_.begin(),h_.end());}

例2

/*********************************************** *     C++沒有要求顯式特化的接口必須和主模板的接口完全 *  匹配.如該例中,沒有定義主模板的empty函數(shù),并且自行增加 *  了size和capitalize兩個函數(shù). *     提醒:此例中不定義empty函數(shù)是不可取的,定義模板的 *  顯式特化和類的派生之間雖然不存在任何技術(shù)上的聯(lián)系,但 *  是用戶依然可以參考類的派生的優(yōu)點(diǎn),讓特化版本至少具有 *  主模板的基本能力.***********************************************/template<>//注意,無任何參數(shù),當(dāng)然,它本來就不是一個模板class Head<char *>{private:  std::vector<char *> h_;public:  void push(char *pval);  char * pop();  //注意,此處沒有提供empty函數(shù)喲!!!  size_t size() const;  void capitalize();};

2.模板局部特化
模板局部特化首先要聲明的是,C++還不支持對函數(shù)模板的局部特化,所以此處我們只討論類模板的局部特化.我們依然首先需要一個主模板.(參考類模板顯式特化) 自我理解:如果針對不能的指針定義不同的完全特化,豈不是太麻煩了,有沒有更好的辦法呢?那就是局部特化了.(例1)提示: 局部特化它是一個模板.完全特化不是一樣模板.

例1

/*********************************************** *  局部特化  *     和完全特化不同,這里的Heap參數(shù)類型只是被部分的確 *  定為T*,而T是一個未指定的類型,這就是為什么說它是局部 *  特化的原因; *     當(dāng)使用一個未經(jīng)任何修飾的指針類型來實(shí)例化Heap時, *  局部特化將優(yōu)先于主模板; *     當(dāng)使用const char * 或 char *(參考類模板顯式特化)來 *  實(shí)例化Heap時,此時完全特化又會優(yōu)先于局部特化. *  Heap<std::string> h1;  主模板  T是std::string *  Heap<std::string *> h2;  局部特化  T是std:string *  Heap<int **> h3;    局部特化 T是int * *  Heap<char *> h4;  完全特化 T是char * *  Heap<const int *> h5;  局部特化 T是const int *  Heap<int (*)()> h6;  局部特化 T是int()***********************************************/template <typename T>class Heap<T *> //注意這里{private:  std::vector<T *>h_;public:  void push(const T *val);  T *pop();  bool empty()  {    return h_.empty();  }};template <typename T>void Heap<T *>::push(const T *val){  //......}

例2

/*********************************************** *     有一點(diǎn)很微妙但很有用:主模板的完全特化或局部特化 *  必須采用與主模板相同數(shù)量和類型的實(shí)參進(jìn)行實(shí)例化,但它 *  的模板的參數(shù)并不需要具有和主模板相同的形式.***********************************************///定義一個模板,有三個模板參數(shù),書寫形式如下template <typename R,typename A1,typename A2> //注意,局部特化中,模板參數(shù)也是三個,但書寫形式可不一樣嘍class Heap<R (*) (A1,A2)>{  //......};Heap<char *(*) (int,int)> h7; //R是char *,A1和A2是int//把 char *(*) (int,int) 想象成一個"指向有兩個參數(shù)的非成員函數(shù)的指針"template <class C,typename T>class Heap<T C::*>{  //......};Heap<std::string Name::*> h8;//T是string,C是Name

盡管為何需要對這些東西使用Heap只是一個猜測,先知道有這么一用法吧!

3.類模板成員特化

雖然模板的特化和類的派生之間沒有任何關(guān)系, 但在特化模板的時候,不妨借鑒一下派生的精神.也就意味著一個完全特化或局部特化通常必須重新實(shí)現(xiàn) 主模板具備的所有能力.
例:

//主模板template <typename T>class Heap{private:  std::vector<T> h_;public:  void push(const T& val);  T pop();  bool empty() const //const聲明在末尾表示該函數(shù)不能修改類變量  {    return h_.empty();  }}//其實(shí)我們真正需要特化的是 push 和 pop兩個函數(shù).//對比顯式特化,它是通過主模板,再寫一個模板顯式特化版本類;//而這里只是對類模板成員進(jìn)行了單獨(dú)特化.template<>void Heap<const char*>::push(const char *const &pval){  h_.push_back(pval);  std::push_heap(h_.begin(),h_.end(),strLess);}template<>const char* Heap<const char*>::pop(){  std:pop_heap(h_.begin(),h_end(),strLess);  const char* tmp = h_.back();  h_.pop_back();  return tmp;}


注意,這些函數(shù)的接口必須和 "它們正在特化其成員" 的模板的相應(yīng)接口相匹配.如例1, 就得和主模板的接口相匹配.而如果你是自己再定義的一個顯式/局部特化版本類,就不需要匹配 一致.(見顯式特化和局部特化),最后指出兩點(diǎn): 首先,除了成員函數(shù)外,其實(shí)成員也可以被顯式特化,如靜態(tài)成員和成員模板.其次,顯式特化是為模板或模板成員提供定制版本的一種手段;而顯式實(shí)例化僅僅是明確地告訴編譯器去實(shí)例化一個成員.       



發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
日韩精品第一区| 国产成人精品综合久久久| 精品视频资源站| 日韩欧美一级二级三级久久久| 国产拍揄自揄精品视频麻豆| 国产乱码午夜在线视频| 中文字幕在线精品| 日韩精品视频在线观看视频| 日本精品二区| 国产欧美日韩精品在线观看| 亚洲一区中文在线| 91精品国产91久久久久久久久| 亚洲三级av| 成人h视频在线观看| 久久精品99国产国产精| 一级片在线播放| 国产一卡2卡3卡4卡网站免费| 中文字幕亚洲乱码| 亚洲区中文字幕| 欧美一级手机免费观看片| 黄色一级大片在线免费看国产一| 日韩在线a电影| 色一区在线观看| 日韩视频精品| 国产aa精品| 亚洲第一中文字幕在线观看| 国产免费永久在线观看| 中文字幕在线中文字幕二区| 欧美中文字幕在线观看视频| 欧美日韩激情一区| 黄色在线播放网站| 欧美乱大交xxxxx另类| 91精品国产91久久| 日韩欧美中文字幕在线播放| 欧美日韩亚洲综合| 国产在线欧美日韩| 亚洲福利精品| 激情国产在线| 国产www在线观看| 日韩av一区二| 精品久久久三级| 国产日韩精品电影| 日韩欧美国产免费| 亚洲大片精品永久免费| 欧美激情一区二区三区在线| 国产区在线看| www.三级.com| 日韩中文字幕| 中文字幕第一页在线播放| 日韩免费视频一区二区视频在线观看| 亚洲免费在线观看av| 一区二区不卡在线播放| 日韩免费视频一区| 快she精品国产999| 国产欧美久久久久久久久| 精品午夜av| 蜜桃视频一日韩欧美专区| 中文字幕在线视频第一页| 一区二区日韩视频| 日韩欧美在线视频日韩欧美在线视频| 欧美日韩国产观看视频| 国产对白在线| 欧美日韩激情一区二区三区| 日韩国产欧美| 91精品国产综合久久精品app| 国产91一区| 中文字幕在线视频网| 日韩亚洲不卡在线| 日韩一级网站| 欧美日韩成人一区二区| 精品在线一区二区| 亚洲小说春色综合另类网蜜桃| 欧美高清一级片在线| 美日韩精品免费视频| 亚洲区中文字幕| 亚洲羞羞网站| 欧美亚洲国产免费| 中文字幕日韩亚洲| 国产免费一级片| 黄色一区二区在线| 国产午夜在线观看| 日韩欧美在线视频日韩欧美在线视频| 亚洲一级影院| 91av久久久| 亚洲女人天堂a在线播放| 欧美在线日韩在线| 亚洲永久免费视频| 欧美片网站免费| 日韩欧美色综合网站| 中文字幕 日韩 欧美| 中文字幕日韩在线视频| 国产高清大尺度一区二区不卡| 91精品视频免费在线观看| 日韩欧美在线网址| 日韩精品在线视频观看| 日韩精品 欧美| a视频在线播放| 国产日韩成人精品| 一区二区在线观看不卡| 亚洲三级中文字幕| 国产在线www| 91精品国产自产在线观看永久∴| 精品日韩欧美| 欧美sm一区| 亚洲福利精品在线| 欧美日韩国产区| 国产欧美日韩亚州综合| 91精品在线观看入口| 欧美久久在线观看| 久久精品日韩无码| 久久久99免费| 91精品久久久久久蜜臀| 亚洲福利在线看| 国产激情三区| 国产乱一区二区| 欧美日韩高清| 日本亚洲视频在线| 日韩视频在线观看视频| 精品久久人人做人人爽| 成人欧美亚洲| 久久精品最新免费国产成人| a天堂中文在线官网在线| 自拍日韩亚洲一区在线| 欧美日韩国产一级片| av免费观看网站| av一区在线观看| 欧美日韩国产系列| 国产不卡的av| 中文字幕在线视频久| 日韩中文字幕国产| 精品日韩欧美| 91精品国产91久久久久| 二区三区不卡不卡视频| 亚洲欧洲综合另类| 中文在线一区二区| 国产在线日韩精品| 欧美婷婷久久| 国产欧美日韩不卡| 国产福利免费观看| 一本久久a久久精品亚洲| 欧美日本精品| 国产999精品在线观看| 国产高清在线视频| 中文字幕亚洲高清| 亚洲成年网站在线观看| 91精品观看| 国产日韩在线亚洲字幕中文| 精品久久久久久无| 91精品久久久久久蜜臀| 国产区日韩欧美| 视频一区二区国产| 欧美日韩国产高清| 亚洲一区日韩在线| 日韩欧美国产成人一区二区| 91久久精品国产91久久| 欧美日韩国产中文精品字幕自在自线| 日韩精品免费视频一区二区三区| 日韩国产在线观看一区| 在线综合 亚洲 欧美中文字幕| 日韩中文欧美在线| 国产欧美在线观看| 视频一区二区中文字幕| 欧美日韩高清在线一区| 中文字幕欧美日韩精品| 久久精品一二三| 欧美日韩在线观看一区| 九九在线精品| 久久精品免费在线观看| 欧美乱大交xxxxx免费| 欧美三级在线视频| 欧美专区中文字幕| 国产在线黄色片| 在线国产1区| 欧美日韩国产一二三| 欧美特黄一区| 91精品国产91久久| 欧美日韩精品综合在线| 91精品国产日韩91久久久久久| 中文字幕在线导航| 欧美日韩在线播放一区| 国产日韩精品在线看| 日韩欧美中文在线视频| 中文字幕日韩高清| av三级在线观看| 精品成人久久久| 国产欧亚日韩视频| 国产95在线|亚洲| 亚洲国产综合久久| 日韩视频在线一区二区三区| 成人福利一区| 日韩欧美在线字幕 | 欧美日韩国产一级片| 中文字幕精品一区二| wwwwww国产| 欧美日韩精品中文字幕| 国产一级久久久| 久久 天天综合| av一级在线| 一级特黄大欧美久久久| 日韩免费看网站| 国产一级在线免费观看| 日韩精品中文在线观看| av免费观看国产| 国产一区二中文字幕在线看| 日韩a一区二区| 高清1区2区| 日韩国产一区三区| 日韩欧美国产片| www.91香蕉视频| √天堂资源中文www| 久久久99精品久久| 一区二区三区精品在线| 午夜成人鲁丝片午夜精品| 日本不卡高清视频一区| 精品1区2区3区| 亚洲高清在线免费| 国产小视频在线观看免费| 国产偷国产偷亚洲清高网站 | 欧美一级免费观看| 在线一区av| 一区二区精品免费| 欧美日韩国产区| 91精品免费观看| 日韩欧美一级在线| 91久久在线| 91精品国产综合久久久久久| 国产wwww| 久草亚洲一区| 中文天堂在线一区| 二区中文字幕| 久久精品日韩无码| 91精品国产91| 亚洲综合在线中文字幕| 一本一道综合狠狠老| 国产乱码在线观看| 中文字幕在线欧美| 国产高清精品二区| 欧美日韩高清一区二区| 中文天堂资源在线| 日韩在线播放一区二区| 最近免费中文字幕在线第一页| 久久视频www| 国产小视频在线观看| 亚洲三级免费看| 午夜国产视频 | 最近中文字幕第一页| 欧美日韩国产影片| 国产91大片| 亚洲乱码视频| 国产无套粉嫩白浆在线2022年 | 亚洲.国产.中文慕字在线| 欧美日韩视频免费播放| 在线国产一级| 欧美成人精品在线| 国产一级片在线播放| 亚洲免费中文字幕| 欧美亚洲专区| 美女在线视频一区| 日本精品福利视频| 亚洲免费视频一区| 日韩三级视频在线看| 亚洲欧美久久234| 精品日韩av一区二区| 欧洲精品在线视频| 国产激情在线| 国产绿帽一区二区三区| 日韩精品视频在线免费观看| 国产乱国产乱300精品| 日韩一级精品| 国产一区免费视频| 免费在线视频一级不卡| 欧美日韩精品免费看| 日韩av一区二| 日韩欧美在线视频日韩欧美在线视频| 99亚洲视频| 中文在线视频| 国产极品嫩模在线视频一区| 日韩久久不卡| 91精品国产综合久久香蕉最新版| 日韩不卡在线观看| 欧美日韩中文字幕精品| 国产欧美日韩视频| 午夜av一区二区| 国产激情在线视频| xxxcom在线观看| 日韩在线三区| 国产日韩电影| 精品一区二区三区中文字幕在线| 日韩精品免费观看视频| 欧美日韩高清一区二区| 欧美三级中文字幕在线观看| 欧美日韩成人一区二区| 精品国内自产拍在线视频| 中文在线视频| 亚洲三级欧美| 欧美日韩精品三区| 亚洲综合日韩中文字幕v在线| 亚洲一区视频在线观看视频| 精品免费视频| 日本一级一片免费视频| 欧美日韩午夜精品| 激情婷婷亚洲| 国产亚洲一区字幕| 国产 欧美 日韩 在线| 国产欧美日韩精品在线| 精品视频国产| 三级网站免费观看| 日韩精品在线免费观看视频| 国产三级在线| 亚洲综合在线中文字幕| 中文在线第一页| 中文字幕欧美日韩va免费视频| 精品一二线国产| 欧美日韩精品在线播放| 国产一二三四| 亚洲二区自拍| 国产欧美日韩精品在线| 综合激情一区| av免费不卡国产观看| 免费在线国产| 日韩在线观看a| 91精品久久久久久蜜臀| 亚洲一区二区三区精品中文字幕| 日韩欧美99| 国产欧美日韩91| 中文字幕狠狠干| 国产欧美中文在线| 日韩三级视频在线| 国产福利第一页| 亚洲一区精品在线| 国产高清精品二区| 国产日韩精品在线| 国产午夜在线观看| 91精品无人成人www| 日韩精品在线观看视频| 日韩亚洲不卡在线| 欧美在线中文字幕| 蜜臀国产一区| 欧美日本精品在线| 欧美亚洲免费高清在线观看| 中文字幕在线观看国产| 国产三级视频在线播放线观看| 1区2区在线| 日韩精品一二三四区| 亚洲v中文字幕| 日韩 欧美 综合| 国产婷婷一区二区| 欧美日韩高清不卡| 999精品色在线播放| 欧美三级中文字幕| 97最新国自产拍视频在线完整在线看| 国产91久久久久| 国产在线高清精品| 天天综合色天天| 国产视频二区| 日韩视频在线观看视频| 久久久久蜜桃| 国产一区高清视频| 日韩精品―中文字幕| 中文字幕欧美日韩在线| 日韩欧美中文字幕公布| 日韩三级视频在线播放| 在线视频国产三级| 亚洲黄色片在线观看| 国产成人精品免费网站| 日韩视频一区| 中文字幕99| 一区二区三区鲁丝不卡| 中文字幕日韩免费视频| 99精品一级欧美片免费播放| 欧美日韩国产成人| 日韩欧美中文免费| 亚洲一区精品电影| 欧美日韩三级在线观看| 国产最顶级的黄色片在线免费观看| 欧美专区中文字幕| 国产丝袜一区| 午夜精品免费视频| 日韩综合精品| 精品乱人伦一区二区三区| 精品久久久精品| 日韩亚洲不卡在线| 精品欧美日韩| 日韩一二三四区| 欧美在线日韩精品| 亚洲图片小说综合| 久久中文精品| 欧美,日韩,国产在线| 91精品观看| 国产在线视频不卡| 日韩中文在线中文网三级| 日韩av一区二区在线| 欧美一级日韩一级| 久久久久久91| 中文天堂资源在线| 欧美日韩亚洲国内综合网| 免费中文字幕日韩欧美| 亚亚洲欧洲精品| 日韩欧美国产午夜精品| 欧美三级一区二区三区|