淺談模板

什麼是模板?
就是告訴編譯器一個模子,讓編譯器根據不同的類型生成不同的代碼。
編寫與類型無關的函數,是代碼複用的一種手段。
函數模板


template<typename T>
void Swap( T& left,  T& right)
{
    T temp = left;
    left = right;
    right = temp;
}

用這種方式定義函數模板就完成了代碼的複用,模板函數工作的原理就是在編譯階段編譯器對傳入的實參進行推演出合適的函數

模板函數的實例化
分爲顯示實例化和隱式實例化

隱式實例化:讓編譯器根據實參推演模板參數的實際類型,當所傳的參數類型編譯器無法進行推演時(模板類型只有一個而實參類型有多個),有兩種處理方式:1.類型轉化 2.顯示實例化

顯式實例化:在函數名後的<>中指定模板參數的實際類型

注意:一個非模板函數可以和一個同名的函數模板同時存在,而且該函數模板還可以被實例化爲這個非模板函數
,當模板函數和同名自定義函數同時存在時優先調用自定義函數,可以通過顯式調用來調用模板函數,
模板函數不允許自動類型轉換,普通函數可以

同樣的類模板與其相同原理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章