57 C 函式模板

2021-09-28 10:40:16 字數 1958 閱讀 8502

//交換int資料

void

swapint

(int

& a,

int& b)

//交換char資料

void

swapchar

(char

& a,

char

& b)

//問題:如果我要交換double型別資料,那麼還需要些乙個double型別資料交換的函式

//繁瑣,寫的函式越多,當交換邏輯發生變化的時候,所有的函式都需要修改,無形當中增加了**的維護難度

//如果能把型別作為引數傳遞進來就好了,傳遞int就是int型別交換,傳遞char就是char型別交換

//我們有一種技術,可以實現型別的引數化---函式模板

//class 和 typename都是一樣的,用哪個都可以

template

<

class

t>

void

myswap

(t& a,t& b)

void

test01()

用模板是為了實現泛型,可以減輕程式設計的工作量,增強函式的重用性。

下面寫個案例:使用函式模板實現對char和int型別陣列進行排序。

//模板列印函式

template

<

class

t>

void

printarray

(t arr,

int len)

cout << endl;

}//模板排序函式

template

<

class

t>

void

mysort

(t arr,

int len)}}

}void

test()

;int intlen =

sizeof

(tempint)

/sizeof

(int);

//排序前 列印函式

printarray

(tempchar, charlen)

;printarray

(tempint, intlen)

;//排序

mysort

(tempchar, charlen)

;mysort

(tempint, intlen)

;//排序後列印

printarray

(tempchar, charlen)

;printarray

(tempint, intlen)

;}

1.函式模板不允許自動型別轉化

2.普通函式能夠自動進行型別轉化

//函式模板

template

<

class

t>

t myplus

(t a, t b)

//普通函式

intmyplus

(int a,

char b)

void

test02()

//函式模板

template

<

class

t>

t myplus

(t a, t b)

//普通函式

intmyplus

(int a,

int b)

void

test03()

//函式模板過載

template

<

class

t>

t myplus

(t a, t b, t c)

void

test04()

C 57 深入理解函式模板

include using namespace std class test template typename t void swap t a,t b typedef void funci int int typedef void funcd double double typedef void ...

57 深入理解函式模板

深入理解 編譯器從函式模板通過具體型別產生不同的函式。編譯器會對函式模板進行兩次編譯 對模板 本身進行編譯,對引數替換後的 進行編譯。注意事項 函式模板本身不是函式,是產生函式模子,因此模板本身不允許隱式型別轉換,自動推導型別時,必須嚴格匹配。顯示型別指定時,能夠進行隱式型別轉換。include i...

57 深入理解函式模板

1 函式模板深入理解 編譯器從函式模板通過具體型別產生不同的函式 編譯器會對函式模板進行兩次編譯 1 對模板 本身進行編譯 2 對引數替換後的 進行編譯 程式1 證明編譯器會對函式模板進行兩次編譯 include include using namespace std class test temp...