視頻彈幕網(wǎng)站怎么做百度搜索提交入口
1.函數(shù)模板
我們經(jīng)常用到Swap函數(shù)交換兩個值。由于需要交換的數(shù)據(jù)的類型不同,我們就需要寫不同參數(shù)類型的同名函數(shù),也就是函數(shù)重載:
然而這三個函數(shù)的邏輯是一樣的,寫這么多有些多此一舉,通過函數(shù)模版可以寫一個通用的交換函數(shù)。
---------------------------------------------------------------------------------------------------------------------------------
1.格式:template<typename T1,typename T2,......typename Tn>
typename是關(guān)鍵字,也可以用class代替
T1-Tn是函數(shù)的參數(shù)類型名(T可以用別的名字代替,只是我們習(xí)慣用T)
---------------------------------------------------------------------------------------------------------------------------------
2.用法:
---------------------------------------------------------------------------------------------------------------------------------
3.原理:
檢測你傳入的參數(shù)類型,隱式的幫你生成這一類型的函數(shù)重載。實際上仍然生成了多個函數(shù),調(diào)用的時候也不是調(diào)用同一個函數(shù),而是調(diào)用對應(yīng)的函數(shù)重載,只不過編譯器替你寫了這些函數(shù)。(實際上,由于交換函數(shù)使用頻繁,已經(jīng)被納入庫中(swap),不需要我們?nèi)?#xff09;
---------------------------------------------------------------------------------------------------------------------------------
4.函數(shù)模版的顯式實例化:
(1)有一種情況:
編譯器不確定T是int還是double類型。
為了解決這個問題你可以這樣:
但是你也可以這樣:
這樣直接指定了T類型而不用編譯器推演,叫做函數(shù)模板的顯式實例化(這種情況下,b會轉(zhuǎn)換為int類型)
(2)但是,如果同一個模板參數(shù)只做返回值的話:
編譯器不能根據(jù)推演返回值類型,所以必須模板實例化:
(3)如果有多個模板類型:
也可以同時指定T1,T2(返回值類型可以由T1決定(T1通過參數(shù)推演)。T1不是只做返回值,也就不是(3)的那種情況)
---------------------------------------------------------------------------------------------------------------------------------
2.類模板
類模板與函數(shù)模板不同的點在于,創(chuàng)建對象時一定要指定模板參數(shù)類型.
A<int>就相當(dāng)于st1的類型
---------------------------------------------------------------------------------------------------------------------------------
