//交換int資料
void
swapint
(int
& a,
int& b)
//交換char資料
void
swapchar
(char
& a,
char
& b)
//問題:如果我要交換double型別資料,那麼還需要些乙個double型別資料交換的函式
//繁瑣,寫的函式越多,當交換邏輯發生變化的時候,所有的函式都需要修改,無形當中增加了**的維護難度
//如果能把型別作為引數傳遞進來就好了,傳遞int就是int型別交換,傳遞char就是char型別交換
//我們有一種技術,可以實現型別的引數化---函式模板
//class 和 typename都是一樣的,用哪個都可以
template
<
class
t>
void
myswap
(t& a,t& b)
void
test01()
用模板是為了實現泛型,可以減輕程式設計的工作量,增強函式的重用性。
下面寫個案例:使用函式模板實現對char和int型別陣列進行排序。
//模板列印函式
template
<
class
t>
void
printarray
(t arr,
int len)
cout << endl;
}//模板排序函式
template
<
class
t>
void
mysort
(t arr,
int len)}}
}void
test()
;int intlen =
sizeof
(tempint)
/sizeof
(int);
//排序前 列印函式
printarray
(tempchar, charlen)
;printarray
(tempint, intlen)
;//排序
mysort
(tempchar, charlen)
;mysort
(tempint, intlen)
;//排序後列印
printarray
(tempchar, charlen)
;printarray
(tempint, intlen)
;}
1.函式模板不允許自動型別轉化
2.普通函式能夠自動進行型別轉化
//函式模板
template
<
class
t>
t myplus
(t a, t b)
//普通函式
intmyplus
(int a,
char b)
void
test02()
//函式模板
template
<
class
t>
t myplus
(t a, t b)
//普通函式
intmyplus
(int a,
int b)
void
test03()
//函式模板過載
template
<
class
t>
t myplus
(t a, t b, t c)
void
test04()
C 57 深入理解函式模板
include using namespace std class test template typename t void swap t a,t b typedef void funci int int typedef void funcd double double typedef void ...
57 深入理解函式模板
深入理解 編譯器從函式模板通過具體型別產生不同的函式。編譯器會對函式模板進行兩次編譯 對模板 本身進行編譯,對引數替換後的 進行編譯。注意事項 函式模板本身不是函式,是產生函式模子,因此模板本身不允許隱式型別轉換,自動推導型別時,必須嚴格匹配。顯示型別指定時,能夠進行隱式型別轉換。include i...
57 深入理解函式模板
1 函式模板深入理解 編譯器從函式模板通過具體型別產生不同的函式 編譯器會對函式模板進行兩次編譯 1 對模板 本身進行編譯 2 對引數替換後的 進行編譯 程式1 證明編譯器會對函式模板進行兩次編譯 include include using namespace std class test temp...