c 函式模板

2021-06-22 01:59:26 字數 1064 閱讀 6600

關鍵字template總是放在模板的電腦關於與宣告的最前面,關鍵字後面是用逗號分隔的模板參數列,該列表是模板參數列,不能為空。模板引數可以是乙個模板型別引數,它代表了一種型別;也可以是乙個模板非型別引數,它代表了乙個常量表示式。

模板型別引數由關鍵字class或typename後加乙個識別符號構成。在函式的模板參數列中,這兩根關鍵字的意義相同,

模板非型別引數由乙個普通的引數宣告構成:

template type func(type (&arr) [size]);

型別和值得替換過程被稱為模板例項化。

當函式模板被呼叫時,對函式實參型別的檢查決定了模板實參的型別和值,這個過程被成為模板實參推演。

c++ 支援兩種模板編譯模式:包含模式和分離模式

1.包含模式下,模板定義放在標頭檔案中。

2.分離模式下,標頭檔案值定義模板宣告,在點c檔案中export 模板

模板顯示特化:

定義:關鍵字template和一對<> 然後是函式模板特化的定義。該定義指出了模板名,被用來特化模板的模板實參,以及函式引數表和函式體。

例:typedef cost char * pcc;

template <> pcc max(pcc s1,pcc s2)

注:乙個程式不能對相同的模板實參集的同一模板同時有乙個顯示特化和乙個例項。

函式模板可以被過載。

模板函式,模板顯示特化函式,普通函式過載。根據模板實參推演最佳可行函式。

乙個函式呼叫可以與普通函式以及函式模板的例項化函式都匹配。

普通函式和函式模板的函式過載解析步驟

1.生成候選函式集。

2.生成可行函式集

3.對型別轉換劃分等級

a.如果值選擇了乙個函式,則呼叫該函式。

b.如果給呼叫時二義的,則從可行函式集中去掉函式模板例項。

4.只考慮可行函式集中的普通函式,完成過載解析過程。

a.如果只選擇了乙個函式,則呼叫該函式。

b.否則,該呼叫是二義的。

模板定義中的名字解析分兩個步驟:

不依賴於模板引數的名字在模板定義時被解析

依賴於嗎模板引數的名字在模板被例項時被解析。

c 函式模板

include using namespace std template t max t a,t b,t c int main int main int i1 185,i2 76,i3 567,i double d1 56.63,d2 90.23,d3 3214.78,d long g1 67854...

C 函式模板

c 提供了函式模板 function template 所謂函式模板,實際上是建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表。這個通用函式就稱為函式模板。凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義一次即可。在呼叫函式時系統會根據實參的型別...

C 函式模板

01 函式模板定義.cpp include include using namespace std if 0 int max int a,int b char max char a,char b double max double a,double b endif define max type1 ...