EasyC++模板重載
?文章轉(zhuǎn)自 公眾號(hào):Coder梁(ID:Coder_LT)
1.重載模板
函數(shù)模板可以使得同一個(gè)函數(shù)對(duì)不同類(lèi)型使用,非常地方便。但有的時(shí)候類(lèi)型不同,只是通過(guò)模板是沒(méi)辦法解決的, 可能邏輯上也會(huì)有所區(qū)別,這個(gè)時(shí)候只是使用模板是無(wú)法解決的。
為了滿(mǎn)足這種需求,我們可以像是重載函數(shù)那樣重載模板。和常規(guī)的函數(shù)一樣,重載的模板的函數(shù)特征,也就是入?yún)⒌臄?shù)量和類(lèi)型必須有所不同。
舉個(gè)例子:比如我們之前定義了一個(gè)函數(shù)模板用來(lái)交換兩個(gè)變量的值。如果我們要交換的不只是變量,而是兩個(gè)數(shù)組,就必須要修改邏輯了。
template <typename T> void Swap(T &a, T &b); template <typename T> void Swap(T *a, T *b, int n);
可以看到我們額外傳入了一個(gè)int n,它表示數(shù)組的長(zhǎng)度。另外,我們?nèi)雲(yún)⒌念?lèi)型也發(fā)生了變化,不再是模板類(lèi)型T的引用,而是指針了。因?yàn)槲覀円邮盏氖且粋€(gè)數(shù)組,而數(shù)組在函數(shù)傳遞當(dāng)中都是以指針的形式進(jìn)行的。所以這里要寫(xiě)成指針,當(dāng)然也可以寫(xiě)成這樣:T a[],兩種形式本質(zhì)上沒(méi)有區(qū)別。
所以我們實(shí)現(xiàn)的話(huà)會(huì)是這樣:
template <typename T>
void Swap(T &a, T &b) {
T temp = a;
a = b;
b = temp;
}
template <typename T>
void Swap(T *a, T *b, int n) {
for (int i = 0; i < n; i++) {
Swap(a[i], b[i]);
}
}
2.問(wèn)題
到這里,相信大家也能看出一點(diǎn)問(wèn)題。
假設(shè)我們有這樣一個(gè)模板函數(shù):
template <typename T> void Swap(T a, T b);
雖然理論上類(lèi)型T是萬(wàn)能類(lèi)型,什么類(lèi)型都可以接受。但我們操作的時(shí)候會(huì)有很多問(wèn)題,比如我們執(zhí)行a = b,對(duì)于數(shù)組類(lèi)型就會(huì)報(bào)錯(cuò)。
再比如我們執(zhí)行a > b,很多類(lèi)型也無(wú)法進(jìn)行比較大小。再比如進(jìn)行算術(shù)運(yùn)算等等,很多類(lèi)型比如指針、數(shù)組或者結(jié)構(gòu)體也沒(méi)辦法進(jìn)行算術(shù)運(yùn)算。
總之模板的功能是很局限的,有的時(shí)候只能處理某些類(lèi)型,很難通用覆蓋所有情況。當(dāng)然有的時(shí)候也是有一些其他辦法繞開(kāi)的,比如結(jié)構(gòu)體也可以重載比較運(yùn)算符,也可以重載一些算術(shù)運(yùn)算符等等。
到此這篇關(guān)于C++模板重載的文章就介紹到這了,更多相關(guān)C++模板重載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++11右值引用和轉(zhuǎn)發(fā)型引用教程詳解
這篇文章主要介紹了C++11右值引用和轉(zhuǎn)發(fā)型引用教程詳解,需要的朋友可以參考下2018-03-03
C/C++中線(xiàn)程基本概念與創(chuàng)建詳解
線(xiàn)程是在進(jìn)程中產(chǎn)生的一個(gè)執(zhí)行單元,是CPU調(diào)度和分配的最小單元,其在同一個(gè)進(jìn)程中與其他線(xiàn)程并行運(yùn)行,他們可以共享進(jìn)程內(nèi)的資源。本文就和大家一起聊聊線(xiàn)程基本概念以及如何創(chuàng)建多線(xiàn)程,需要的可以參考一下2022-09-09
C++ 17標(biāo)準(zhǔn)正式發(fā)布! 更簡(jiǎn)單地編寫(xiě)和維護(hù)代碼
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之?dāng)U展字符詳解
c++實(shí)現(xiàn)加載so動(dòng)態(tài)庫(kù)中的資源

