函數(shù)模板,將同一種函數(shù)算法應(yīng)用于各種數(shù)據(jù)類(lèi)型。
聲明:
template <typename T>
void swap(T & a,T & b);
定義:
template <typename T>
void swap(T & a,T & b)
{
T temp;
temp = a;
a = b;
b = temp;
}
注意函數(shù)模板不能縮短可執(zhí)行程序,最終的代碼不包含任何模板,只包含了為程序生成的實(shí)際函數(shù)。函數(shù)模板的好處在于,使得生成多個(gè)函數(shù)定義更簡(jiǎn)單、更可靠。
重載和函數(shù)模板結(jié)合時(shí),并不要求模板參數(shù)都必須是模板參數(shù)類(lèi)型。
為特定類(lèi)型提供具體化模板定義,稱(chēng)為顯式具體化。當(dāng)編譯器找到與函數(shù)調(diào)用匹配的具體化定義時(shí),將使用該定義而不再尋找其模板。具體化優(yōu)先于常規(guī)模板,而非模板函數(shù)優(yōu)先于具體化和常規(guī)模板。
用顯式具體化,要求原型和定義用template <>打頭。
template <typename T>
void swap(T &,T &);
template <> void swap(job &,job &);
或者:
template <> void swap<job>(job &,job &);
以上均為隱式實(shí)例化,由編譯器根據(jù)參數(shù)類(lèi)型推斷。而顯式實(shí)例化直接指定生成哪一種類(lèi)型示例,由template打頭:
template void swap<int>(int &,int &);
顯式實(shí)例化作用為減少推斷隱式實(shí)例化的必要,提高編譯效率。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注