資源共享吧豪華貴族SVIP
  
- 資源幣
- 5
- 積分
- 62
- 貢獻(xiàn)
- 0
- 在線時(shí)間
- 26 小時(shí)
- 注冊(cè)時(shí)間
- 2023-6-5
- 最后登錄
- 2025-3-1

|
2 模板包括:函數(shù)模板和類模板
模板參數(shù)列表的寫法:template <typename T1,typename T2,...>,其中typename代表任意類型和class可以等價(jià)替換
函數(shù)模板和類模板的寫法:就是在模板的下面寫一個(gè)使用T1 T2的函數(shù)或者類
函數(shù)模板的特點(diǎn):可以和其他函數(shù)模板和普通函數(shù)形成重載,調(diào)用的時(shí)候普通函數(shù)的優(yōu)先級(jí)大于函數(shù)模板
函數(shù)/類模板的實(shí)例化:
包含:隱式和顯式實(shí)例化
顯式實(shí)例化:
含義:就是顯式的寫出指定類型的函數(shù)/類模板聲明
代碼:template 類型 名字<>(),<>內(nèi)寫出指定類型,()中如果有typename類型的變量,直接顯式的寫出來(lái)類型,沒有就不寫
注意:如果某種類型的顯式實(shí)例化沒有寫,那么調(diào)用這種類型的函數(shù)/模板類就會(huì)出錯(cuò)
隱式實(shí)例化:
含義:不顯示的寫出來(lái)指定類型的模板聲明,在調(diào)用的時(shí)候?qū)懼付ǖ念愋?
函數(shù)模板和類模板在模塊化結(jié)構(gòu)中:不能分為頭文件和實(shí)現(xiàn)文件,但是要避免頭文件臃腫可以:在頭文件的聲明后緊挨著#include "實(shí)現(xiàn)文件名字"
類模板的實(shí)例化:類名<typename T1,typename T2,...> 對(duì)象;
類模板的綜合使用:
已知定義了一個(gè)類模板A,里面有各種函數(shù),如果在類外進(jìn)行具體實(shí)現(xiàn)?
tmplate<參數(shù)類型 參數(shù)名>
函數(shù)類型 類名<參數(shù)名,參數(shù)名>::函數(shù)名(參數(shù)類型 參數(shù)名){
}
類模板中可以定義函數(shù)模板或類模板類型的成員模板,成員模板不能是虛的
模板的特化: 包含:全特化和偏特化(也叫部分特化)
含義: 全特化:就是再寫一個(gè)同名的模板且給模板的通常參數(shù)T指定特定類型 部分特化:給模板參數(shù)指定特殊情況的實(shí)現(xiàn)
怎么寫?:
1模板參數(shù)列表寫成template <>
2類或函數(shù)名后面加<指定類型>
模板參數(shù):
模板的參數(shù)類型: 可以是類型參數(shù)T,可以是指定整形參數(shù),也可以有默認(rèn)值
模板可變參數(shù):
含義:可以讓模板的參數(shù)類型的個(gè)數(shù)和參數(shù)的個(gè)數(shù)可變
寫法:
打包和解包:
打包:是在函數(shù)模板參數(shù)列表中定義參數(shù)包的過程
解包:是在函數(shù)調(diào)用中使用 ... 語(yǔ)法將參數(shù)包展開放入函數(shù)調(diào)用之中的過程
解包關(guān)鍵代碼:args...
解包通常用于:遞歸調(diào)用(args...) 的時(shí)候
解包遞歸調(diào)用代碼:
template <typename T, typename ...Args> // 模板參數(shù)列表
函數(shù)為:
void print(T t1, Args ...args) { // 函數(shù)參數(shù)包
cout << t1 << " "; // 打印第一個(gè)參數(shù)
print(args...); // 遞歸調(diào)用,打印余下的參數(shù)
}
調(diào)用print(1,"yunfan");的時(shí)候會(huì)輸出1 yunfan 和一個(gè)print()的輸出,所以一定要在函數(shù)模板前寫一個(gè)無(wú)參print
模板的位置:通常在全局,或者在類中
|
|