函數模板,將同一種函數算法應用于各種數據類型。
聲明:
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;
}
注意函數模板不能縮短可執行程序,最終的代碼不包含任何模板,只包含了為程序生成的實際函數。函數模板的好處在于,使得生成多個函數定義更簡單、更可靠。
重載和函數模板結合時,并不要求模板參數都必須是模板參數類型。
為特定類型提供具體化模板定義,稱為顯式具體化。當編譯器找到與函數調用匹配的具體化定義時,將使用該定義而不再尋找其模板。具體化優先于常規模板,而非模板函數優先于具體化和常規模板。
用顯式具體化,要求原型和定義用template <>打頭。
template <typename T>
void swap(T &,T &);
template <> void swap(job &,job &);
或者:
template <> void swap<job>(job &,job &);
以上均為隱式實例化,由編譯器根據參數類型推斷。而顯式實例化直接指定生成哪一種類型示例,由template打頭:
template void swap<int>(int &,int &);
顯式實例化作用為減少推斷隱式實例化的必要,提高編譯效率。
新聞熱點
疑難解答