C++11 模板元編程 - 模板的默認(rèn)參數(shù)


上面例子中伸但,棧的實現(xiàn)使用了std::vector檬某。為了讓棧的實現(xiàn)更加靈活幌绍,我們將實現(xiàn)棧的容器也作為模板的參數(shù)之一又沾。

template<typename T, typename Container = std::vector<T>>
struct Stack
{
    void push(const T& elem)
    {
        elems.push_back(elem);
    }

    T pop()
    {
        if(empty()) throw std::out_of_range("Stack<>::pop: empty!");

        auto elem = elems.back();
        elems.pop_back();
        return elem;
    }

    bool empty() const
    {
        return elems.empty();
    }

private:
    Container elems;
};

如上我們?yōu)轭惸0逶黾恿艘粋€類型參數(shù)Container倍权。和函數(shù)類似喇嘱,模板也支持聲明默認(rèn)參數(shù)否灾,這里我們將Container默認(rèn)設(shè)值為std::vector<T>奸攻。由于在模板的形參聲明過程中匆背,后面的聲明可以使用前面出現(xiàn)過的形參呼伸,我們在typename Container = std::vector<T>中使用了T,因此這里std::vector<T>仍舊可看做是一個具體類型靠汁。

現(xiàn)在我們還可以像之前一樣使用該類模板蜂大,當(dāng)使用Stack<int>定義intStack時Container使用默認(rèn)的std::vector<T>。同時我們可以顯示指定Container為別的容器類蝶怔,例如Stack<int, std::deque<int>> intStack;奶浦。

每個用于替換形參Container的具體類型,必須滿足Stack使用Container時的隱式約束踢星。例如上例中Stack使用了Container的無參構(gòu)造函數(shù)澳叉,調(diào)用了Container的push_backback沐悦,pop_back成洗,empty接口,并且對每個接口的參數(shù)和返回值都有一定預(yù)期藏否。上面使用的std::vector<T>std::deque<T>都滿足如上約束瓶殃。一旦不滿足,會出現(xiàn)編譯錯誤副签。

目前C++中遥椿,模板這種對參數(shù)特征的約束只能通過參數(shù)被使用的情況隱式推斷出來基矮,后續(xù)的標(biāo)準(zhǔn)后可能會引進concept的特性使程序員可以對約束顯式化描述。


模板的模板參數(shù)

返回 C++11模板元編程 - 目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冠场,一起剝皮案震驚了整個濱河市家浇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碴裙,老刑警劉巖钢悲,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異舔株,居然都是意外死亡莺琳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門督笆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芦昔,“玉大人,你說我怎么就攤上這事娃肿」径校” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵料扰,是天一觀的道長凭豪。 經(jīng)常有香客問我,道長晒杈,這世上最難降的妖魔是什么嫂伞? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮拯钻,結(jié)果婚禮上帖努,老公的妹妹穿的比我還像新娘。我一直安慰自己粪般,他們只是感情好拼余,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著亩歹,像睡著了一般匙监。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上小作,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天亭姥,我揣著相機與錄音,去河邊找鬼顾稀。 笑死达罗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的静秆。 我是一名探鬼主播粮揉,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绍载,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了滔蝉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤塔沃,失蹤者是張志新(化名)和其女友劉穎蝠引,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛀柴,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡螃概,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸽疾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吊洼。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖制肮,靈堂內(nèi)的尸體忽然破棺而出冒窍,到底是詐尸還是另有隱情,我是刑警寧澤豺鼻,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布综液,位于F島的核電站,受9級特大地震影響儒飒,放射性物質(zhì)發(fā)生泄漏谬莹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一桩了、第九天 我趴在偏房一處隱蔽的房頂上張望附帽。 院中可真熱鬧,春花似錦井誉、人聲如沸蕉扮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慢显。三九已至,卻和暖如春欠啤,著一層夾襖步出監(jiān)牢的瞬間荚藻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工洁段, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留应狱,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓祠丝,卻偏偏與公主長得像疾呻,于是被迫代替她去往敵國和親除嘹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

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