C++模板系列1-基礎(chǔ)

函數(shù)模板

  1. 如下面的函數(shù)模板參數(shù):
template<class T1, class T2, class T3>

其中,T1笋轨,T2,T3三個類型赊淑,只有出現(xiàn)在函數(shù)形參中的參數(shù)可以被編譯器自動推導(dǎo)出來爵政,否則的話,寫在返回值和函數(shù)內(nèi)部的類型陶缺,編譯器是不負(fù)責(zé)推導(dǎo)的钾挟,此時需要調(diào)用者指定具體類型才可以,所以推薦可以被自動推導(dǎo)的類型寫在后面饱岸,不人為指定掺出,其余需人為指定的寫在前面。

  1. 函數(shù)模板可以被重載苫费,分為如下兩種情況:
    (1)模板函數(shù)的具體化
  1. 此函數(shù)相對于模板函數(shù)有更高優(yōu)先級被匹配到;
  2. 支持參數(shù)的自動類型轉(zhuǎn)化(模板函數(shù)不支持)汤锨;
  3. 手動調(diào)用的話,也可以加上<T>百框,來指定調(diào)用那個具體化的版本闲礼。

(2)不一樣參數(shù)數(shù)量的重載;

類模板

1 簡單的類模板定義與函數(shù)模板基本相同铐维,使用模板定義類時注意柬泽,函數(shù)參數(shù)能使用const T&的地方也盡量使用;

2 類模板的重載分為特化與偏特化兩種

特化的首要要求是必須特化類的所有成員函數(shù)嫁蛇。

類模板的定義是:

template<class T>
class Stack {};

特化則是:

template<>
class Stack<string> {};

類模板的定義是:

template<class T1, class T2>
class MyClass {};

偏特化則是偏特化一部分:

template<class T>           //模板參數(shù)數(shù)量可以變化锨并;
class MyClass<T, T> {       //類名后面一定要跟著尖括號;
public:
    void print() {
        cout << "222" << endl;
    }
};

template<class T1, class T2>
class MyClass<T1*, T2*> {
public:
    void print() {
        cout << "333" << endl;
    }
};

template<class T>
class MyClass<T*, T*> {
public:
    void print() {
        cout << "555" << endl;
    }
};

template<class T>
class MyClass<T, int> {
public:
    void print() {
        cout << "444" << endl;
    }
};

偏特化的過程中只要不重復(fù)就都可以睬棚,但是不保證實際調(diào)用的時候不發(fā)生ambiguous:
MyClass<int, int>在MyClass<T,T>和MyClass<T1,T2>之間發(fā)生ambugious第煮,如果定義了更好的匹配,MyClass<T, T>就沒有問題了抑党。

3 類模板也可以使用默認(rèn)參數(shù)包警,如:

template<class T, class U = vector<T>>  //如此定義之后對使用也有了相應(yīng)要求
class Stack {};

函數(shù)模板與類模板中的non-type模板參數(shù)

template<>尖括號里面的不一定是class/typename定義的類型,還可以是類似于變量聲明的樣子:

template<class T, int MAXSIZE>
class MyClass {};
或者:
template<class T, int MAXSIZE>
void func() {}

那個類似于變量聲明的參數(shù)就是nontype參數(shù)新荤,這個參數(shù)感覺類似于有類型的常量(當(dāng)然只能是int類型的)揽趾,在編譯器處理之后,會進(jìn)行常量的替換苛骨,nontype不同時篱瞎,類型/函數(shù)也認(rèn)為不一樣苟呐。
ps. nontype的參數(shù)至少是const的,由于const是運行期常量俐筋,所以MAXSIZE的替換操作不一定是在什么時候呢牵素。

兩個用途是:

  1. 放在class template里,可以在后期決定數(shù)組的大小是多大澄者,比如:
template<class T, int MAXSIZE>
class Stack {
T nums[MAXSIZE];
};

不同時候用笆呆,可能有不同的且明確的大小,此時可以使用這種情況粱挡。

  1. 函數(shù)template中使用時赠幕,可以用于定義仿函數(shù),與STL中的算法函數(shù)搭配使用:
template<class T, int MAXSIZE>
int func(int a) {
    return a + MAXSIZE;
}
transform(arr.begin(), arr.end(), func<int, 10>);  //可以用于生成合適的函數(shù)指針
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末询筏,一起剝皮案震驚了整個濱河市榕堰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嫌套,老刑警劉巖逆屡,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異踱讨,居然都是意外死亡魏蔗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門痹筛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來莺治,“玉大人,你說我怎么就攤上這事味混〔ⅲ” “怎么了诫惭?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵翁锡,是天一觀的道長。 經(jīng)常有香客問我夕土,道長馆衔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任怨绣,我火速辦了婚禮角溃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘篮撑。我一直安慰自己减细,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布赢笨。 她就那樣靜靜地躺著未蝌,像睡著了一般驮吱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上萧吠,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天左冬,我揣著相機與錄音,去河邊找鬼纸型。 笑死拇砰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的狰腌。 我是一名探鬼主播除破,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼琼腔!你這毒婦竟也來了皂岔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤展姐,失蹤者是張志新(化名)和其女友劉穎躁垛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體圾笨,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡教馆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了擂达。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片土铺。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖板鬓,靈堂內(nèi)的尸體忽然破棺而出悲敷,到底是詐尸還是另有隱情,我是刑警寧澤俭令,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布后德,位于F島的核電站,受9級特大地震影響抄腔,放射性物質(zhì)發(fā)生泄漏瓢湃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一赫蛇、第九天 我趴在偏房一處隱蔽的房頂上張望绵患。 院中可真熱鬧,春花似錦悟耘、人聲如沸落蝙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筏勒。三九已至赚瘦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奏寨,已是汗流浹背起意。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留病瞳,地道東北人揽咕。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像套菜,于是被迫代替她去往敵國和親亲善。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容

  • C++ 模板簡介 一逗柴、模板 使用模板的目的就是能夠讓程序員編寫與類型無關(guān)的代碼蛹头。 模板是一種對類型進(jìn)行參數(shù)化的工具...
    MinoyJet閱讀 2,360評論 0 12
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)戏溺,斷路器渣蜗,智...
    卡卡羅2017閱讀 134,638評論 18 139
  • 本文轉(zhuǎn)載自:http://southpeak.github.io/2014/10/25/objective-c-r...
    idiot_lin閱讀 928評論 0 4
  • 十里長亭遇見你耕拷, 指點江山變無趣。 緊隨你后是我影托享, 扣人心弦是你情骚烧。 怕是前世已相識, 你我今生又分離闰围。 走遍天...
    佩印閱讀 343評論 0 0