顯式具體化(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)算符的使用方法,從而要重寫一遍專門的算法。