中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

template_11實(shí)參演繹-創(chuàng)新互聯(lián)

1,演繹過程

匹配類型A(來自實(shí)參的類型),參數(shù)化類型P(行參參數(shù)聲明)
如果被聲明的參數(shù)是一個(gè)引用聲明g(T& )那么P就是所引用類型T;
f(T)中P就是所聲明的參數(shù)類;
decay指從數(shù)組和函數(shù)類型隱式轉(zhuǎn)換為指針類型。
如果實(shí)參的類型是數(shù)組或函數(shù)類型,則會發(fā)生decay,此時(shí)還會忽略高層次的const和volatile限定符。

template <class T>
T const& max(T const& a, T const& b)



T被要求同時(shí)是char[7]和char[4]所以error.
如果去掉參數(shù)聲明中的引用符號,則可以decay,演繹成char*就能編譯通過了。

2,演繹上下文
根據(jù)一些基本的類型匹配構(gòu)造出復(fù)雜的類型。

fp中T演繹為int**
fe中E為bool,N為32
fs中T1,T2,T3為int,S,double

復(fù)雜的類型聲明都是產(chǎn)生自比它基本的構(gòu)造;匹配過程從最頂層的構(gòu)造開始,然后不斷遞歸各種組成元素(即構(gòu)造):大多數(shù)的類型聲明構(gòu)造都可以使用這種方式進(jìn)行匹配,這些構(gòu)造被稱為演繹 的上下文。

某些構(gòu)造不能作為演繹上下文:
受限制的類型名稱,諸如Q<T>::X類型名稱不能被用來演繹模板參數(shù)T。
除了非類型參數(shù)外模板參數(shù)還包含其他成份的非類型表達(dá)式,諸如S<T+2>,int(&)[sizeof(S<T>)]。

3,特殊的演繹
存在兩種特殊情況,其中用于演繹的實(shí)參-參數(shù)對(A-P)并不是分別來自于函數(shù)調(diào)用的實(shí)參和函數(shù)模板的參數(shù)。
第1種情況出現(xiàn)在取函數(shù)模板地址的時(shí)候,此時(shí)P是函數(shù)模板聲明的參數(shù)化類型,而A是被賦值或初始化的指針?biāo)淼暮瘮?shù)類型:
template<class T>
void f(T, T);

void(*pf)(char, char) = &f;
上面P就是void(T, T),而A就是void(char, char)
pf被初始化為"特化f<char>"的地址

另一種特殊情況和轉(zhuǎn)型運(yùn)算符模擬一起出現(xiàn),
資料說可以吧S轉(zhuǎn)換為int(&)[20],于是P為T[N],A為int[20]
but,我測試卻是無法轉(zhuǎn)換,可能是vs不支持。

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括琿春網(wǎng)站建設(shè)、琿春網(wǎng)站制作、琿春網(wǎng)頁制作以及琿春網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,琿春網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到琿春省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

4,
模板實(shí)參演繹只能應(yīng)用于函數(shù)模板和成員函數(shù)模擬,不能用于類模板和類模版的構(gòu)造函數(shù)。


依賴于模板參數(shù)調(diào)用缺省實(shí)參


不是依賴型,也不能用于演繹模板實(shí)參


5,Barton-NackMan方法:限制的模板擴(kuò)展
需要定義類模版的operator ==的時(shí)候,如果把該運(yùn)算符聲明為模板的成員,則改運(yùn)算符的第一個(gè)實(shí)參(this指針)和第二個(gè)實(shí)參的轉(zhuǎn)型規(guī)則可能不一致。而operator==意味著它的兩個(gè)實(shí)參應(yīng)該是對稱的,有了不同轉(zhuǎn)型后就很難保證這種對稱性了 。
于是如下圖把該運(yùn)算符聲明為一個(gè)名字空間作用域的函數(shù)供調(diào)用。


如果函數(shù)模板不能被重載,則在這個(gè)作用域中也不能聲明其他的operator==模板了。
把這個(gè)運(yùn)算符作為類的普通友元函數(shù)定義在類的內(nèi)部即可。
假設(shè)用int類型來實(shí)例化模板類,那么作為實(shí)例化的結(jié)果,這個(gè)友元類運(yùn)算符相應(yīng)地被具體聲明了(即確定了參數(shù)類型)。但是這個(gè)具體函數(shù)本身并不是函數(shù)模板實(shí)例化的結(jié)果,它本身就是一個(gè)非模板函數(shù),只是借助于實(shí)例化過程的邊緣效應(yīng)它才被聲明為一個(gè)具體函數(shù),并且插入到全局作用域中。
由于是非模板函數(shù),所以即使在語言不支持函數(shù)模板重載的情況下也可以對該運(yùn)算符"重載",借助該技術(shù)可以不使用模板運(yùn)算符operator==(T, T)卻使運(yùn)算符能應(yīng)用于所有類型的T(無限擴(kuò)展機(jī)制),因此叫做限制的模板擴(kuò)展(restricted template expansion)。
由于友元定義在類定義的內(nèi)部,因此它被隱式的看作是inline的,因此可以把實(shí)現(xiàn)委托給一個(gè)函數(shù)模板,這個(gè)函數(shù)模板不需要內(nèi)聯(lián)也不會和相同名字的其他模板沖突。



模板運(yùn)算符重載:        Arry<>::operator==
運(yùn)算符友元:            operator==
命名空間作用域運(yùn)算符:    operator==<>

-------------------------------------------------
該技術(shù)的關(guān)鍵就是在類模板實(shí)例化的過程中,伴隨生成一個(gè)非模板的具體函數(shù)。
而且這個(gè)函數(shù)并不產(chǎn)生自函數(shù)模板,因此也不需要去進(jìn)行模板實(shí)參演繹,但該函數(shù)卻屬于重載解析規(guī)則。

當(dāng)前文章:template_11實(shí)參演繹-創(chuàng)新互聯(lián)
標(biāo)題URL:http://www.rwnh.cn/article48/dcidhp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)云服務(wù)器、面包屑導(dǎo)航搜索引擎優(yōu)化、網(wǎng)站維護(hù)網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
廉江市| 宝山区| 临桂县| 赤水市| 四会市| 河北区| 永登县| 民县| 余江县| 太和县| 青州市| 类乌齐县| 来宾市| 枞阳县| 苗栗县| 双牌县| 新巴尔虎右旗| 大化| 庆安县| 若尔盖县| 富蕴县| 云南省| 安阳县| 武强县| 闻喜县| 嫩江县| 阜新| 景德镇市| 七台河市| 上高县| 榆社县| 丹阳市| 三明市| 铜陵市| 大冶市| 涿鹿县| 锦屏县| 江永县| 常宁市| 靖远县| 库车县|