模板的意義:對型別也可以進行引數化
函式模板:把處理不同型別的公共邏輯抽象成函式,就得到了函式模板。不進行編譯,因為型別不知道
模板的例項化:函式呼叫點進行例項化,會生成乙個真正的函式
模板函式:由函式模板例項化出來的函式,需要被編譯器所編譯
模板的實參推演:可以根據使用者傳入的實參型別,來推導出模板型別引數的具體型別。
模板的特例化:特殊(不是編譯器提供的,而是使用者提供的)的例項化
模板函式、模板的特例化、非模板函式的過載關係:編譯器優先把compare處理成函式名字,沒有的話,採取找compare模板
//函式模板
template>
//定義乙個模板引數列表
bool compare
(t a,
t b)
//compare是乙個函式模板
/*在函式呼叫點,編譯器用使用者指定的型別,從原模板例項化乙份函式**出來
模板函式
bool compare(int a,int b)
bool compare(double a,double b)
bool compare(const char* a,const char* b)
*///模板函式的特例化 針對compare函式模板,提供const char*型別的特例化版本
template<
>
bool compare<
const char*
>
(const char* a,
const char* b)
//非模板函式 與模板無關 是普通函式
bool compare
(const char* a,
const char* b)
int main()
模板**不能在乙個檔案中定義,在另乙個檔案中使用的。
模板**呼叫之前,一定要看到模板定義的地方,這樣的話,模板才能夠正常的例項化,產生能夠被編譯器編譯的**。
所以模板**都是放在標頭檔案之中的,然後在在原始檔之中直接進行#include包含。
複習C (十九)函式模板
函式模板是通用的函式描述,它們使用泛型來定義函式,其中泛型可用具體的型別替換。通過將型別作為引數傳遞給模板,可使編譯器生成該型別的函式。這有時也被稱為通用程式設計。template typename anytype void swap anytype a,anytype b 關鍵字template和...
C 模板之函式模板
c 中分為函式模板和類模板,它們之間的相同點是都含有模板型參表,不同點在模板例項化的時候函式模板可以不用顯示的宣告模板類項,編譯器會自動幫我們匹配,而類模板則需要顯示定義出來,例如 template compare type type compare a,b template class queue...
C 模板之函式模板
泛型程式設計 編寫與型別無關的邏輯 是 復用的一種手段。模板是泛型程式設計的基礎 模板代表乙個函式家族,該函式與型別無關,在使用時被引數化,根據實參型別產生函式的特定型別版本 它本身不是類或函式 模板函式的格式 模板的例項化 產生模板特定型別的過程稱為函式模板的例項化 template t add ...