1.關(guān)鍵字template總是放在模板的定義與聲明的最前面, 后面是用逗號分隔的模板參數(shù)列表(template parameter list), 參數(shù)表不能為空
2.模板非類型參數(shù)是由一個普通的參數(shù)聲明構(gòu)成, 代表一個潛在的值:
template <typename Type, int size>
Type min(Type (&arr)[size]);
//當(dāng)函數(shù)模板min()被實(shí)例化時, size的值會被一個編譯時刻已知的常量值代替
3.類型和值的替換過程被稱為模板的實(shí)例化(template instantiation)
4.c++支持兩種模板編譯模式:
包含模式(Inclusion Model)
分離模式(Separation Model)
包含編譯模式下, 在每個模板被實(shí)例化的文件中包含函數(shù)模板的定義, 并且往往把定義放在頭文件中, 向?qū)?nèi)聯(lián)函數(shù)左那樣
--缺點(diǎn): 函數(shù)模板體(body)描述了實(shí)現(xiàn)細(xì)節(jié)
分離編譯模式下, 函數(shù)模板聲明放在頭文件中, 函數(shù)模板定義放在cpp文件里
//.h
template <typename Type> Type min(Type t1, Type t2);
//.cpp
export template <typename Type>
Type min(Type t1, Type t2) { /* ... */ }
//關(guān)鍵字 export! 可導(dǎo)出的模板
//并不是所有的編譯器都支持分離模式

