函式模板的用法,以及類外定義的注意事項

2022-02-17 21:08:24 字數 1018 閱讀 8273

先來個例子:

1 #include 2

3using

namespace

std;45

6 template

7t1 ff(t1 a,t1 b,t2 c)812

13int

main()

14

需要注意的地方有:

1.template關鍵字表示宣告的是模板。

2.<>中時模板的參數列,可以有一項或多項,其中的型別名稱為引數化型別,是一種抽象型別或可變型別。

3.class是型別關鍵字,也可以用typename作為關鍵字。

4.函式返回值型別可以是普通型別,也可以是模板參數列中指定的型別。

5.模板參數列中的引數型別可以是普通型別。

函式模板定義好後,即可生成各種具體的函式,該過程稱之為例項化。函式模板例項化分為顯式例項化與隱式例項化。(前面的例子即為隱式例項化)

顯式例項化舉例:

1 #include 2

3using

namespace

std;45

6 template

7t1 ff(t1 a,t1 b,t2 c)812

13int

main()

14

注意一點:當程式裡同時出現過載函式和函式模板時,優先繫結過載函式,若是不能精確匹配,方匹配函式模板。

classa;

template

inline

void a::f (const std::string&key, t value)

這裡是乙個專案中用到的例子,t是整數型別,is_integral包含所有整數型別,remove_reference是去引用(如果不這樣做,呼叫方傳參帶引用,匹配會失敗,因為帶引用的type與指標類似,不能稱之為整數),類外實現帶的宣告與類內差異很大,v僅僅用作形式上與類內宣告保持匹配,沒有實際意義。

另外需要注意的是,模板缺省內聯,必須把實現體放在對應標頭檔案裡。

函式模板和類模板的定義和使用

模板是泛型程式設計的基礎。所謂泛型程式設計就是編寫與型別無關的邏輯 是一種復用的方式。模板分為函式模板和類模板。函式模板 建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表,這個通用函式就稱為函式模板。一般形式 template typename t 通用函式定義 注意 關鍵字...

函式模板和類模板成員函式的定義通常放在標頭檔案中

今天寫程式時,將函式模板的宣告和定義分開放在標頭檔案和.cpp檔案中,發生了連線錯誤。上網檢視資料和檢視 c primer 5 p582發現,函式模板和類模板成員函式的定義通常放在標頭檔案中,除非使用export關鍵字實現分離。下面是 c primer 5 的原文 p582 關鍵概念 模板和標頭檔案...

函式模板和類模板成員函式的定義通常放在標頭檔案中

今天寫程式時,將函式模板的宣告和定義分開放在標頭檔案和.cpp檔案中,發生了連線錯誤。上網檢視資料和檢視 c primer 5 p582發現,函式模板和類模板成員函式的定義通常放在標頭檔案中,除非使用export關鍵字實現分離。下面是 c primer 5 的原文 p582 關鍵概念 模板和標頭檔案...