目錄
非類型模板參數
類模板沒有實例化的情況
模板的特化
注意函數特化中遇到的問題
建議:(直接使用函數重載)
類模板特化
全特化
偏特化
偏特化有以下兩種表現方式:
部分特化(將模板參數類表中的一部分參數特化)
模板分離編譯
什么是分離編譯
模板的分離編譯
解決方法
模板總結
非類型模板參數
模板參數分類型形參與非類型形參。
類型形參即:出現在模板參數列表中,跟在class或者typename之類的參數類型名稱。
非類型形參:就是用一個常量作為類(函數)模板的一個參數,在類(函數)模板中可將該參數當成常量來使用。
類模板沒有實例化的情況
模板的特化
通常情況下,使用模板可以實現一些與類型無關的代碼,但對于一些特殊類型的可能會得到一些錯誤的結 果,需要特殊處理,比如:實現了一個專門用來進行小于比較的函數模板
注意函數特化中遇到的問題
這里const修飾的是left,right,所以const應該放到Data* 之后修飾指針指向的值
建議:(直接使用函數重載)
類模板特化
全特化
全特化即是將模板參數列表中所有的參數都確定化
偏特化
偏特化:任何針對模版參數進一步進行條件限制設計的特化版本。
偏特化有以下兩種表現方式:
部分特化(將模板參數類表中的一部分參數特化)
參數更進一步的限制
偏特化并不僅僅是指特化部分參數,而是針對模板參數更進一步的條件限制所設計出來的一個特化版本
限制只要是指針類型就走此特化
模板分離編譯
什么是分離編譯
一個程序(項目)由若干個源文件共同實現,而每個源文件單獨編譯生成目標文件,最后將所有目標文件鏈接起來形成單一的可執行文件的過程稱為分離編譯模式。
模板的分離編譯
解決方法
1. 將聲明和定義放到一個文件 "xxx.hpp" 里面或者xxx.h其實也是可以的。推薦使用這種。
?
2. 模板定義的位置顯式實例化。這種方法不實用,不推薦使用。