C 函式模板與類模板例項解析

2021-07-07 03:41:48 字數 1161 閱讀 4505

c++函式模板與類模板例項解析

本文針對c++函式模板與類模板進行了較為詳盡的例項解析,有助於幫助讀者加深對c++函式模板與類模板的理解。具體內容如下:

泛型程式設計(generic programming)是一種程式設計正規化,通過將型別引數化來實現在同乙份**上操作多種資料型別,泛型是一般化並可重複使用的意思。泛型程式設計最初誕生於c++中,目的是為了實現c++的stl(標準模板庫)。

模板(template)是泛型程式設計的基礎,乙個模板就是乙個建立類或函式的藍圖或公式。例如,當使用乙個vector這樣的泛型型別或者find這樣的泛型函式時,我們提供足夠的資訊,將藍圖轉換為特定的類或函式。

一、函式模板

乙個通用的函式模板(function template)就是乙個公式,可用來生成針對特定型別或特定值的函式版本。模板定義以關鍵字template開始,後面跟乙個模板引數列表,列表中的多個模板引數(template parameter)以逗號分隔。模板引數表示在類或函式定義中用到的型別或值。

1、型別引數

乙個模板型別引數(type parameter)表示的是一種型別。我們可以將型別引數看作型別說明符,就像內建型別或類型別說明符一樣使用。型別引數前必須使用關鍵字class 或typename:

template // typename和class一樣的

t function(t* p)

關鍵字typename和class是一樣的作用,但顯然typename比class更為直觀,它更清楚地指出隨後的名字是乙個型別名。

編譯器用模板型別實參為我們例項化(instantiate)特定版本的函式,乙個版本稱做模板的乙個例項(instantiation)。當我們呼叫乙個函式模板時,編譯器通常用函式實參來為我們推斷模板實參。當然如果函式沒有模板型別的引數,則我們需要特別指出來:

int a = 10;

cout << function(&a) << endl; // 編譯器根據函式實參推斷模板實參

cout << function(&a) << endl; // 指出模板引數為int

2、非型別引數

在模板中還可以定義非型別引數(nontype parameter),乙個非型別引數表示乙個值而非乙個型別。我們通過乙個特定的型別名而非關鍵字class或typename來指定非型別引數:

// 整形模板

template

C 函式模板與類模板例項解析

泛型程式設計 generic programming 是一種程式設計正規化fmlqt,通過將型別引數化來實現在同乙份 上操作多種資料型別,泛型是一般化並可重複使用的意思。泛型程式設計最初誕生於c 中,目的是為了實現c 的stl 標準模板庫 模板 template 是泛型程式設計的基礎,乙個模板就是乙...

函式模板例項

函式模板例項 這是值得考慮一下如何模板函式的實現在c 因為未來的教訓將關閉一些這些概念。原來,c 不編譯模板函式直接。相反,在編譯的時候,當編譯器呼叫乙個函式模板,它複製的模板功能,並與實際型別代替模板型別引數!與實際型別的函式被呼叫函式模板例項。讓我們來看看這樣乙個例子看看。首先,我們有乙個模板函...

C 模板實戰1 函式模板

模板本身不是可編譯的 而是用來指導編譯器生成可編譯 的文字。1 函式模板引數 函式模板引數可以根據模板實參自動推導,也就是說可以從實參自動推導的模板引數可以省略書寫,但是要注意以下幾個規則 1 編譯器只根據函式呼叫時給出的實參列表推導模板引數值,與函式引數無關的模板引數無法推導 2 與函式返回值相關...