函數(shù)模板

template<class T> //告訴編譯器 下面如果出現(xiàn)T不要報錯趴荸,T是一個通用類型,template<class T>等價于template<typename T>

自動類型推導(dǎo)顿涣,必須有參數(shù)類型才可以推導(dǎo)

例:

template <class T>
void mySwap(T& a, T& b)
{
    T tmp = a;
    a = b;
    b = tmp;
}
void test()
{
    int a = 10;
    int b = 20;
    //自動推導(dǎo)
    mySwap(a, b);

}

顯示指定類型

template <class T>
void mySwap(T& a, T& b)
{
    T tmp = a;
    a = b;
    b = tmp;
}
void test()
{
//指定類型
mySwap<int>(a,b);
}

模板必須要指定出T才可以使用

普通函數(shù)和函數(shù)模板的區(qū)別

普通函數(shù) 可以進行隱式類型轉(zhuǎn)換

函數(shù)模板不可以進行隱式類型轉(zhuǎn)換

函數(shù)模板和普通函數(shù)在一起調(diào)用規(guī)則:

  • 如果出現(xiàn)重載涛碑,優(yōu)先使用普通函數(shù)調(diào)用孵淘,如果普通函數(shù)沒有實現(xiàn),報錯揉阎。
template <class T>
void mySwap(T& a, T& b)
{
    T tmp = a;
    a = b;
    b = tmp;
}

void mySwap(int a, int b)
{
    int tmp = a;
    a = b;
    b = tmp;
}
void test()
{
int a=10;
int b=20;
//模板更好匹配背捌,普通函數(shù)需要的是int型數(shù)據(jù)
mySwap(a,b);
}
  • 可以使用空模板實參列表的語法限定編譯時只能通過模板匹配
mySwap<>(a,b);//空參
  • 函數(shù)模板可以像普通函數(shù)那樣可以被重載
  • 如果函數(shù)模板可以產(chǎn)生一個更好的匹配载萌,那么選擇模板
template <class T>
void mySwap(T& a, T& b)
{
    T tmp = a;
    a = b;
    b = tmp;
}

void mySwap(int a, int b)
{
    int tmp = a;
    a = b;
    b = tmp;
}
void test()
{
char a='a';
char b='b';
//模板更好匹配,普通函數(shù)需要的是int型數(shù)據(jù)
mySwap(a,b);
}

模板實現(xiàn)機制

  • 編譯器并不是把函數(shù)模板處理成能夠處理任何類型的函數(shù)
  • 函數(shù)模板通過具體類型產(chǎn)生不同的函數(shù)
  • 編譯器會對函數(shù)模板進行兩次編譯垮衷,在聲明的地方對模板代碼本身進行編譯乖坠,在調(diào)用的地方對參數(shù)替換后的代碼進行編譯

模板的局限性

模板不能解決所有的類型。

如果出現(xiàn)不能解決的類型熊泵,可以通過第三代具體化自定義數(shù)據(jù)類型,解決上述問題

如果具體化能夠優(yōu)先匹配徐许,那么就選擇具體化

語法

template<> 返回值 函數(shù)名<具體類型>(參數(shù)...){}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雌隅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子修械,更是在濱河造成了極大的恐慌,老刑警劉巖肯污,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹦渣,死亡現(xiàn)場離奇詭異东羹,居然都是意外死亡,警方通過查閱死者的電腦和手機属提,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門冤议,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恕酸,“玉大人,你說我怎么就攤上這事袱箱。” “怎么了发笔?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵了讨,是天一觀的道長制轰。 經(jīng)常有香客問我,道長垃杖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任泉瞻,我火速辦了婚禮苞冯,結(jié)果婚禮上舅锄,老公的妹妹穿的比我還像新娘司忱。我一直安慰自己,他們只是感情好坦仍,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布繁扎。 她就那樣靜靜地躺著,像睡著了一般梳玫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姚垃,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天积糯,我揣著相機與錄音,去河邊找鬼看成。 笑死,一個胖子當著我的面吹牛绍昂,可吹牛的內(nèi)容都是我干的窘游。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼忍饰,長吁一口氣:“原來是場噩夢啊……” “哼艾蓝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起亮靴,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤于置,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后搓侄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體话速,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡讶踪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了廓俭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡留晚,死狀恐怖错维,靈堂內(nèi)的尸體忽然破棺而出橄唬,到底是詐尸還是另有隱情,我是刑警寧澤隆判,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布侨嘀,位于F島的核電站,受9級特大地震影響咬腕,放射性物質(zhì)發(fā)生泄漏涨共。R本人自食惡果不足惜纽帖,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一懊直、第九天 我趴在偏房一處隱蔽的房頂上張望吹截。 院中可真熱鬧,春花似錦凝危、人聲如沸蛾默。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽醒陆。三九已至,卻和暖如春寺晌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呻征。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工陆赋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嚷闭,地道東北人。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像胜蛉,于是被迫代替她去往敵國和親色乾。 傳聞我的和親對象是個殘疾皇子领突,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容