C 函式模板

2021-10-04 21:09:27 字數 2072 閱讀 1493

對於學習和使用stl的程式設計師或者研究人員,可能更需要快速地掌握和使用stl提供的各種容器。但人們很快發現,函式模板的作用極其強大。

函式模板定義乙個無限的相關函式集合。當函式除了資料型別不一致外, 其餘的處理全部相同,此時函式模板隨之誕生。這也是建立函式模板的原因。

函式模板可以定義引數化的非成員函式,使程式設計師能夠用不同型別的引數呼叫相同的函式,由編譯器決定該採用哪種型別,從模板函式中生成相應的**。

#include

#include

using

namespace std;

template

<

typename t>

void

print

(const t& var)

//也可以使用template宣告函式模板

void

main()

執行結果:hel1o beijing!

#include

#include

using

namespace std;

template

<

class

t>

void

print

(t& ii, t& jj)

//函式模板

void

main()

執行結果:

hello beijing!

i am a programmer!

上例中模板函式的兩個引數是同一型別,還可以使用多種型別的多個引數。請參見下例:

#include

#include

using

namespace std;

template

class

t1<

class

t2>

void

print

(t1& ii, t2& jj)

//模板函式

void

main()

執行結果:

hello beijing!

總結:使用模板函式實現多個引數時,函式模板的引數既可以是同型別資料,也可以是不同型別資料。參見上面兩個例子。

函式模板功能極其強大,但也存在個別情況。當待比較的函式模板沒有提供正確的操作符或者方法,程式不會對此進行編譯。為了避免此類錯誤,可以使用函式模板與同名的非模板函式過載,即函式的定製。本書不再贅述。

下面舉乙個函式模板的例項,供讀者參考。下例實現的功能是將任何資料型別轉換為字串,還可以將字串轉換為其他資料型別。

(1) 建立模板函式tostring和fromstring(), 並將其放在標頭檔案ex18.h中。

#ifndef ex18 h

#define ex18 h

#include

#include

#include

template

<

typename t> t fromstring (

const std: string& s)

//模板函式,將字串特化成其他資料炎型

template

<

typename t>std: string tostring

(const t& t)

//模板函式,將其他資料獎型特換成字串

(2 )建立主程式ex18.cpp。

#include

"ex18.h"

#include

#include

using

namespace std;

void

main()

執行結果:

i==「1234」

i==「567.34」

i==「(

2.5,

4.1)」

i==「1234」

i==「567.34」

i==「(

2.5,

4.1)」

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