模板主要包括函數(shù)模板和類模板這兩種。
函數(shù)模板技術(shù)定義了參數(shù)化的非成員函數(shù)肌毅,這使得程序能夠使用不同的參數(shù)類型調(diào)用相同的函數(shù)筷转。而至于使用何種類型,則是由貶義詞確定的芽腾。并從模板中生成相應(yīng)的代碼旦装。
模板函數(shù)定義:
template
T Add(T a, T b){
T result = a + b;
return a + b;
}
與一般函數(shù)的不同之處在與并沒有明確的指出使用何種數(shù)據(jù)類型和返回值又是那種數(shù)據(jù)類型摊滔。數(shù)據(jù)類型的確定是由使用者在使用時指定阴绢。
在代碼中所定義的函數(shù)模板,需要類型T能夠?qū)Α?”運算符進行運算艰躺,也就是說如果沒有默認(rèn)的“+”運算符是現(xiàn)實呻袭,要使用該函數(shù)模板。參數(shù)化的類型的實例類型就需要對運算符“+”進行重載腺兴,否則會遇到意想不到的結(jié)果左电。
類模板
類模板描述了能夠管理其他數(shù)據(jù)類型的通用數(shù)據(jù)類型。
template
class TemplateSample
{
private:
T& entity;
public:
void F(T& arg);//使用參數(shù)類型定義成員函數(shù)
}
第一部分是模板說明页响,用于聲明該類為類模板切聲明參數(shù)化的數(shù)據(jù)類型篓足。
使用類模板時與函數(shù)模板有點不一樣,調(diào)用時需要明確的指出使用何種數(shù)據(jù)類型闰蚕,而不能有編譯器自行制定栈拖,如下代碼所示使用類模板定義一個變量:
TemplateSampledemo; //指出該模板使用Int類型
在實際使用該類模板之前,編譯器不會為改模板生成任何代碼没陡。
在調(diào)用類模板中的成員函數(shù)時涩哟,和普通的類中的成員函數(shù)一樣索赏,如下代碼所示調(diào)用類模板TemplateSample中的F(T&)函數(shù):
demo.F(123);
類模板的模板參數(shù)定義除了class進行定義以外,還可以使用其他數(shù)據(jù)類型贴彼,但至少需要有一個模板形參是使用class定義的潜腻。
在使用非類類型的模板形參是,調(diào)用的時候改形參傳遞的是一個值器仗,而不是一種類型融涣。
template
class CSampleTemplate
{
private:
T t1;
T2 t2;
public:
CSampleTemplate(T arg1, T2 arg2){
t1 = arg1+ num;
t2 = atg2 + num;
}
void Write(){
std::cout<<t1<<endl
}
~ CSampleTemplate(void){}
}