日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++之类模板特化

發(fā)布時(shí)間:2024/1/1 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++之类模板特化 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C++之類模板特化

模板:

template<typename T1, typename T2> class example{ public:example();~example(); private:T1 data1;T2 data2;int data3; };template<typename T1, typename T2> example<T1, T2>::example():data1(1),data2(1),data3(1) {cout << "模板實(shí)例構(gòu)造完成" << endl; }template<typename T1, typename T2> example<T1, T2>::~example() {cout << "模板實(shí)例析構(gòu)完成" << endl; }

全特化

全特化指的是在類模板的基礎(chǔ)上,再重新定義一個(gè)類,該類與類模板的內(nèi)容完全一致,唯一的區(qū)別是指定了類模板的所有類型。
例如:

template<> //C++語法規(guī)定,此處加template<>是為了說明正在定義一個(gè)特例化版本 class example<int, char> //此處尖括號(hào)內(nèi)的內(nèi)容說明模板參數(shù)為int、char { public:example();~example(); private:int data1;char data2;int data3; }; //由于已經(jīng)指定了模板參數(shù),所以這里不用給出模板形參 example<int, char>::example():data1(2),data2(2),data3(2) {cout << "構(gòu)造完成全特化<int, char>的類模板實(shí)例" << endl; } example<int, char>::~example() {cout << "析構(gòu)完成全特化<int, char>的類模板實(shí)例" << endl; }

局部特化

類模板的局部特化有兩種方式,一種是指定部分模板參數(shù);另一種是對(duì)全部的模板參數(shù)做出修飾。前者也稱為偏特化。

第一種:

template<typename T1> class example<T1, char> //這里指定第二個(gè)模板參數(shù)為char { public:example();~example(); private:T1 data1;char data2;int data3; };template<typename T1> //由于只指定了第二個(gè)模板參數(shù)的類型,所以這里還有給出模板形參T1 example<T1, char>::example():data1(3),data2(3),data3(3) {cout << "偏特化<T1, char>實(shí)例構(gòu)造完成" <<endl; }template<typename T1> example<T1, char>::~example() {cout << "偏特化<T1, char>實(shí)例析構(gòu)完成" <<endl; }

第二種:

template<typename T1, typename T2> class example<T1 *, T2 *> //這里特化為兩模板參數(shù)為指針版本 { //當(dāng)實(shí)例化對(duì)象時(shí),若指定的模板參數(shù)為兩指針,則會(huì)通過此來進(jìn)行實(shí)例化 public:example();~example(); private:T1 data1; //對(duì)于data1和data2而言,它們只關(guān)心實(shí)例化時(shí)傳入指針解引用后的類型T2 data2;int data3;T1 * data4; //對(duì)于data4和data5而言,它們關(guān)心實(shí)例化時(shí)傳入的指針T2 * data5; };template<typename T1, typename T2> //對(duì)于編譯器而言//模板的類型仍是未知的,所以需要給出T1、T2兩個(gè)模板參數(shù) example<T1 *, T2 *>::example():data1(0),data2(0),data3(0),data4(&data1),data5(&data2) {cout << "構(gòu)造<T1 *, T2 *>" << endl; }template<typename T1, typename T2> example<T1 *, T2 *>::~example() {cout << "析構(gòu)<T1 *, T2 *>" << endl; }

下面是對(duì)上面定義的幾個(gè)類的實(shí)例化:

int main() {example <int, char>ex1;example <char, char>ex2;example <int , int>ex3;example <char, int>ex4;example <int *, int *>ex5;return 0; }


在特化這里,無論是函數(shù)特化還是類特化,在調(diào)用或者實(shí)例化時(shí)都遵循“最特化”原則,即最特殊的那一個(gè)。

總結(jié)

以上是生活随笔為你收集整理的C++之类模板特化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。