模板為什么存在?
相信大家都寫過Add函數(shù)
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;
}
【注意】
使用模板特化時,必須要先有基礎的模板函數(shù)(就是上面第一個模板函數(shù))
使用特換模板函數(shù)時格式有要求:
1.template 后直接跟<> 里面不用寫類型
2.函數(shù)名<特化類型>(特化類型 參數(shù)1, 特化類型 參數(shù)2 , …) 在函數(shù)名后跟<>其中寫要特化的類型
特化的函數(shù)的函數(shù)名,參數(shù)列表要和原基礎的模板函數(shù)想相同,避免不必要的錯誤
也可以寫為
char* Max(char* left, char* right)
{
if (strcmp(left, right) > 0)
return left;
return right;
}
編譯器當檢測到普通函數(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)于全特化模板
總結:在調(diào)用模板時,優(yōu)先級
普通函數(shù)<偏特化<全特化
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
文章題目:C++模板特化(template)-創(chuàng)新互聯(lián)
分享地址:http://jinyejixie.com/article20/dsieco.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App設計、靜態(tài)網(wǎng)站、響應式網(wǎng)站、微信公眾號、品牌網(wǎng)站制作、標簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容