函數(shù)模板

顯式具體化(explicit specialization)

對于函數(shù)調(diào)用是有一個(gè)優(yōu)先級:普通函數(shù)>顯式具體化模板>普通模板
智育什么叫顯式具體化,先看下面的代碼

struct job
{
    char name[20];
    int number;
    double salary;
}
void swap(job &, job&);
template<> void swap<job>(job &, job&);//顯示具體化模板
template<typename T> void swap(T&, T&);

至于為什么要使用顯示具體化,就要看下面的實(shí)例了。


模板顯式實(shí)例化和顯式具體化

當(dāng)我們自己寫了一個(gè)模板之后,一般是編譯器自己會幫我們實(shí)例化好具體的函數(shù),通過你傳進(jìn)的參數(shù)類型來判斷(這是隱式實(shí)例化(implicit instantiation))

template<typename T>
void func(T &a,T &b){...}
func(2,3);//編譯器自動創(chuàng)建類型為int的函數(shù)

如果有的時(shí)候需要我們自己實(shí)例化,這就是顯式實(shí)例化

int ra =9,r1=3;
template fun<int>(int &,int &);//使用的是上述模板中已經(jīng)定義好的算法
//注意template后不接<>符號

而另一種就是顯式具體化,聲明方式是:

template<> func(int &a,int &b);
template<>func<int>(int &,int&);//兩種方式等價(jià),這種聲明是說對于這種指定的
類型要使用專門的,不同于模板的用法

這種主要是用于用戶自己定義的類或者結(jié)構(gòu)體,模板中可能使用了運(yùn)算符,而自定義的類和結(jié)構(gòu)體沒有這些運(yùn)算符的使用方法,從而要重寫一遍專門的算法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 項(xiàng)目地址 課程內(nèi)容 Part1 C++模板簡介(An Introduction to C++ Template) ...
    偷天神貓閱讀 612評論 0 1
  • 很實(shí)用的編程英語詞庫,共收錄一千五百余條詞匯。 第一部分: application 應(yīng)用程式 應(yīng)用、應(yīng)用程序app...
    春天的蜜蜂閱讀 1,611評論 0 22
  • 注意:本文中代碼均使用 Qt 開發(fā)編譯環(huán)境,如有疑問和建議歡迎隨時(shí)留言。 模板是 C++ 支持參數(shù)化程序設(shè)計(jì)的工具...
    趙者也閱讀 5,884評論 1 5
  • 函數(shù)模板是通用的函數(shù)描述,通過將類型作為參數(shù)傳遞給模板,使編譯器生成可用具體的類型的函數(shù)。類似于: 對于不同類型使...
    lxfeng閱讀 545評論 0 0
  • 這幾天在為周年慶晚宴準(zhǔn)備節(jié)目,我負(fù)責(zé)組織統(tǒng)籌舞蹈節(jié)目,我自己先選了一個(gè)今年熱門的舞蹈《社會搖》,并且提前幾天自己...
    上善若水澤萬物閱讀 288評論 0 1

友情鏈接更多精彩內(nèi)容