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