C 複習之函式模板

2021-10-06 04:55:52 字數 1175 閱讀 5659

模板的意義:對型別也可以進行引數化

函式模板:把處理不同型別的公共邏輯抽象成函式,就得到了函式模板。不進行編譯,因為型別不知道

模板的例項化:函式呼叫點進行例項化,會生成乙個真正的函式

模板函式:由函式模板例項化出來的函式,需要被編譯器所編譯

模板的實參推演:可以根據使用者傳入的實參型別,來推導出模板型別引數的具體型別。

模板的特例化:特殊(不是編譯器提供的,而是使用者提供的)的例項化

模板函式、模板的特例化、非模板函式的過載關係:編譯器優先把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 ...