C++模板特化(template)-創(chuàng)新互聯(lián)

C++模板特化(template)
模板為什么存在?
相信大家都寫過Add函數(shù)

嘉定網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,嘉定網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為嘉定近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的嘉定做網(wǎng)站的公司定做!
int Add(int left,int right)
{
    return left+right;
}

double Add(double left,int right)
{
    return left+right;
}

這種寫法會使代碼冗余,而且不美觀,所以就需要一個通用的Add函數(shù),模板就出現(xiàn)了

template<class T>       //或template<typename T>
T Add(T left,T right)
{
    cout << typeid(T).name() << endl;//查看調(diào)用模板的類型
    return left+right;
}

模板特化存在的必要性
上面的模板只能解決一些普通的類型,但對于特殊的類型就會出錯
比如:

template<class T>
T& Max(T& left, T& right)
{
    return left > right? left : right;
}
int main()
{
    char* p1 = "world";
    char* p2 = "hello";
    cout << Max(p1, p2) << endl;
}

模板特化中的函數(shù)特化
對于上面char*類型的解決方法:

 template<>
 char*& Max<char*>(char*& left, char*& right)
 {
    if (strcmp(left, right) > 0)
        return left;

    return right;
 }

C++模板特化(template)【注意】

使用模板特化時,必須要先有基礎(chǔ)的模板函數(shù)(就是上面第一個模板函數(shù))

使用特?fù)Q模板函數(shù)時格式有要求:

1.template 后直接跟<> 里面不用寫類型
2.函數(shù)名<特化類型>(特化類型 參數(shù)1, 特化類型 參數(shù)2 , …) 在函數(shù)名后跟<>其中寫要特化的類型

特化的函數(shù)的函數(shù)名,參數(shù)列表要和原基礎(chǔ)的模板函數(shù)想相同,避免不必要的錯誤
也可以寫為

char* Max(char* left, char* right)
{
    if (strcmp(left, right) > 0)
        return left;

    return right;
}

編譯器當(dāng)檢測到普通函數(shù)和模板都可以使用時,優(yōu)先使用普通函數(shù)
所以,函數(shù)模板一般不需要特化,直接將不能處理類型的具體函數(shù)給出
模板特化中的類特化
1.全特化

template<class T1,class T2>
T1& Max(T1& left, T2& right)  //返回類型自定T1或T2
{
    return left > right? left : right;
}

2.偏特化(部分特化)

//都可以
template<T,int>
template<T,int>
template<double,T>
template<T,double>

編譯器在調(diào)用模板時,偏特化模板優(yōu)于全特化模板
C++模板特化(template)總結(jié):在調(diào)用模板時,優(yōu)先級
普通函數(shù)<偏特化<全特化

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

文章題目:C++模板特化(template)-創(chuàng)新互聯(lián)
分享地址:http://muchs.cn/article20/dsieco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、靜態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站微信公眾號、品牌網(wǎng)站制作、標(biāo)簽優(yōu)化

廣告

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

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司