這篇文章將為大家詳細講解有關(guān)C++中模版函數(shù)的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
曲阜ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
C++中的模版總體可以分為兩大類:模版函數(shù)、模版類。
定義:模版函數(shù)是通用的函數(shù)描述,也就是說它們使用通用類型來定義,其中的通用類型可用具體類型替換。
代碼實例:
#include//模版類的聲明 template void Swap(T& a,T& b); int main() { int i = 10; int j = 20; std::cout<<"i=" << i << "," << "j=" < void Swap(T& a,T& b) { T temp; temp = a; a = b; b = temp; }
以上實例為最簡單的函數(shù)模版實例,編譯器會根據(jù)具體使用的類型生成相對應(yīng)的函數(shù)。
重載的模版:
需要多個對不同的類型使用同一算法時可使用模版,如上代碼所示。但是并非所有的類型都使用相同的算法。為滿足這種需求,可以像重載常規(guī)函數(shù)定義那樣重載模版定義。和重載常規(guī)函數(shù)一樣,重載函數(shù)的特征表必須不同。代碼實例如下:
#include//模版類的聲明 template void Swap(T& a,T& b); const int iCount = 5; template void Swap(T* a,T*b,int n); int main() { int i = 10; int j = 20; std::cout<<"i=" << i << "," << "j=" < void Swap(T& a,T& b) { T temp; temp = a; a = b; b = temp; } template void Swap(T* a,T*b,int n) { for (int i=0;i 如上代碼新增了一個模版,用于交換兩個數(shù)組中的元素,原來的模版特征標為(T&,T&),新模版的特征標為(T[],T[]),int)。注意,在后一個模版中,最后一個參數(shù)的類型為具體類型(int),而不是通用類型,并非所有的模版參數(shù)都必須是模版參數(shù)類型。
顯示具體化:
對于給定的函數(shù)名,可以有非模版函數(shù),模版函數(shù)和顯示具體化模版函數(shù)以及它們的重載版本。
顯示具體化的原型和定義應(yīng)該以template<>打頭,并通過名稱來指出類型。
具體化將覆蓋常規(guī)模版,而非模版函數(shù)將覆蓋具體化和常規(guī)模版。
下面是用于交換Job結(jié)構(gòu)的非模版函數(shù),模版函數(shù)和具體化的原型。
void Swap(job &,job&);//非模版函數(shù) templatevoid Swap(T&,T&);//模版函數(shù) template <> void Swap (job&,job&);//顯示具體化函數(shù),其中Swap后的job參數(shù)可去掉,則函數(shù)簽名為template <> void Swap(job&,job&); 前面指出,如果有多個原型,編譯器在選擇原型時,非模版將優(yōu)先于顯示具體化和模版版本,而顯示具體化將優(yōu)先于使用模版生成的版本。
如下面的調(diào)用:
double u,v;
Swap(u,v);//使用通用的模版
job a,b;
swap (a,b)//使用顯示具體化版本。實例化和具體化:
為了進一步了解模版,必須理解術(shù)語實例化和具體化。記住,在代碼中包含函數(shù)模版本身并不會生成函數(shù)的定義,它只是一個用于生成函數(shù)定義的方案。編譯器使用模版為特定類型生成定義時,得到的是模版實例(instantiation)。例如:函數(shù)調(diào)用Swap(i,j),使編譯器生成一個Swap()的一個實例,該實例使用int類型。模版并非函數(shù)定義,但使用int的模版實例是函數(shù)定義。這種實例化方式被稱為隱式實例化,因為編譯器之所以知道需要定義,是由于程序調(diào)用Swap()時提供了int參數(shù)。
現(xiàn)在編譯器還可以允許顯示實例化,這意味著可以直接命令編譯器生成特定的實例,如Swap
。其句法是,聲明所選的種類-用<>符號指示類型,并在聲明前加上關(guān)鍵字template: template void Swap(int,int);//顯示實例化 實現(xiàn)了這種特性的編譯器在看到上述聲明后,將使用Swap()模版生成一個int類型的實例。
與顯示實例化不同的是,顯示具體化使用下面兩個等價聲明的之一:
template <> void Swap(int,int); template <> void Swap(int,int); 區(qū)別在于,這些聲明的意思是”不要使用Swap()模版來生成函數(shù)定義,而應(yīng)該使用獨立的、專門的函數(shù)定義顯示為int類型生成函數(shù)定義。
注意:試圖在一個編程單元中使用同一種類型的顯示具體化與顯示實例化將出錯。
關(guān)于“C++中模版函數(shù)的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
文章題目:C++中模版函數(shù)的示例分析
文章位置:http://weahome.cn/article/jsigdi.html