什么是函數(shù)模板具则?
函數(shù)模板提供了一種函數(shù)行為苛骨,該函數(shù)行為可以用多種不同的類型進(jìn)行調(diào)用稼钩,它和普通函數(shù)很相似顾稀,唯一的區(qū)別就是有些函數(shù)元素是未確定的,這些元素將在使用時(shí)被參數(shù)化坝撑。
一個(gè)簡單的函數(shù)模板
template <typename T>
inline T const& max(T const&a, T const&b)
{
return a<b?b:a;
}
只要使用函數(shù)模板静秆,編譯器會(huì)自動(dòng)地引發(fā)一個(gè)實(shí)例化過程,使用者不需要額外地請(qǐng)求模板的實(shí)例化巡李。
編譯過程中抚笔,模板會(huì)被編譯兩次,分別是:
- 實(shí)例化之前击儡,先檢查模塊代碼本身塔沃,查看語法是否正確蝠引,比如遺漏;等錯(cuò)誤是在這里發(fā)現(xiàn)的阳谍。
- 實(shí)例化期間蛀柴, 檢查模塊代碼,查看是否所有的調(diào)用都有效矫夯。
一定要讓所有的函數(shù)模板的聲明在被調(diào)用的位置之前鸽疾!
重載函數(shù)模板實(shí)例化順序
- 一個(gè)非模板函數(shù)和一個(gè)同名的模板函數(shù)同時(shí)存在時(shí),一般條件相同時(shí)會(huì)先實(shí)例化非模板函數(shù)
- 然而训貌,如果模板可以產(chǎn)生一個(gè)更好匹配的函數(shù)制肮,那么將選擇模板
- 可以顯示地指定一個(gè)空的模板實(shí)參列表,表明只有模板來匹配該調(diào)用递沪, 而且所有的模板參數(shù)都應(yīng)該根據(jù)實(shí)參演繹出來
- 模板不允許自動(dòng)類型轉(zhuǎn)換豺鼻;但是普通函數(shù)可以進(jìn)行自動(dòng)類型轉(zhuǎn)換,所以調(diào)用需要自動(dòng)類型轉(zhuǎn)換的將使用非模板函數(shù)款慨。