c 函式模板

2021-07-23 14:27:40 字數 2167 閱讀 5765

函式模板是通用的函式的描述,也就是說它們使用泛型來定義函式,之中的泛型可以具體化為int,double等變數型別。通過將具體的型別作為引數傳入模板中,可以使編譯器生成該型別的函式。

基本型別

templatetypename functionname(anytype namea, ..., anytype namen);
第一行建立乙個模板,並將型別命名為anytype.其中的關鍵字templatetypename是必需的存在的(其中typename可以用class代替)。

模板並不會建立任何函式,他只是告訴編輯器如何定義函式。比如說當需要使用int型別時,編輯器就會按照模板的格式建立該型別的函式,並且使用int來代替模板中的anytype

#include 

template

void swap(t &a, t &b);

int main()

template

void swap(t &a, t &b)

template

// 模板一

void swap(t &a, t &b);

template

// 模板二

void swap(t *a, t *b, int n);

templatet>

void f(t a,t b)

在該函式模板中,如果在**中存在賦值操作,而同時t被識別為陣列時,操作就不可進行。

template

// 模板一

void swap(t &a, t &b);

當我們想要進行兩個結構體的具體成員交換式,上述**並不能實現這樣的操作。這是我們可以提供乙個具體的函式定義——顯式具體化(可以將其當做原始模板的乙個具體化操作,當編輯器找到與函式呼叫相匹配的具體定義時,將跳過函式模板使用該具體定義。)

- 第三方具體化

//(job為乙個結構體)

void swap(job &, job &);

//非模板函式

template

void swap(t &,t &);

//模板函式

template

<> void swap(job &,job &);

//具體化

編輯器則是通過具體的需要來選擇函式。比如

int a=10,b=20

;swap(a,b);//使用模板函式

job a,b;

swap(a,b);//使用具體化

具體案列

#include 

template

void swap(t &a, t &b);

struct job

;// explicit specialization

template

<> void swap(job &j1, job &j2);

int main()

; job sidney = ;

cout

show(sue);

show(sidney);

swap(sue, sidney); // uses void swap(job &, job &)

cout

show(sue);

show(sidney);

return0;}

template

void swap(t &a, t &b)

template

<> void swap(job &j1, job &j2) // specialization

...

template

void swap(t &,t &);

template

<> void swap(job &,job &);

int main()

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 函式模板

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

C 函式模板

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