青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Note of Justin

關于工作和讀書的筆記

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  47 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks

留言簿(14)

搜索

  •  

積分與排名

  • 積分 - 53273
  • 排名 - 434

最新評論

閱讀排行榜

評論排行榜

[原創文章歡迎轉載,但請保留作者信息]
Justin 于 2010-04-06


對于一般的函數或類來說,要做到類似下面的事情很簡單:
如果兩個函數有相同的實現部分,就把這共同的部分提出來放在第三個函數中供前兩者調用;
如果兩個類有相同的成員,就把這共同的部分提出來放在第三個類中供前兩者繼承或是組合(composition)。

但對于模板來說,就沒有那么明顯了。因為對于模板而言,一些重復的代碼并沒有那么直觀。
template<typename?Item,?int?price>
class?Shop
{
???
public:
??????
void?SellIt();
???
//..
};

class?Apple;
Shop?
<Apple,?50>?AShop;
Shop?
<Apple,?50.5>?AnotherShop;

AShop.SellIt();
AnotherShop.SellIt();

以上程序粗看沒什么問題(當然看出來的都是好同學),而實際上SellIt()在編譯后出現了兩個版本,僅僅因為AShop和AnotherShop的price不一樣。
非類型模板參數(non-type template parameter,在這里就是price)會導致編譯時生成重復的代碼(在這里是兩個SellIt)。
編譯器是傻孩子,只要看到模板參數有不一樣就會生成分別為不同的參數生成相應的類或者函數,于是SellIt就悄悄地有了兩個版本。

解決方案之一在下面:
template<typename?Item>
class?ShopBase
{
???
protected:
??????
void?SellIt(int?price);
//..
};

template
<typename?Item,?int?price>
class?NewShop?:?private?ShopBase<Item>
{
???
private:
??????
using?ShopBase<Item>::SellIt;
???
public:
??????
void?SellIt()?{?SellIt(price);?}
???
//..
};

SellIt被提出來放到基類ShopBase中實現,不會因為price的不同而生成不同的函數,這樣重復部分就被去除了。
另外例子中有需要注意的地方還不少:
?? - ShopBase中的SellIt是保護類型(protected),因為它只是為了被子類調用,不希望被其他人直接調用。
?? - 子類在使用模板基類前,需要用到Item43中提到的三種方法之一,否則編譯器找不到所指的函數。
(原文中大師同時用了using和this->的方法,我覺得是多余的,用了using就不必要再用this->了。跑去看侯捷的譯作,除了翻譯過來的中文,無解@#¥%)
?? - 從Shop::SellIt中調用ShopBase::SellIt幾乎沒有增加調用成本,因為Shop::SellIt是在類的聲明中定義的,實際上是內聯函數。(有可能根本就沒有額外代價,編譯器會優化掉的)

Item44的前半段就是這些了。注意看了后半段有點唏噓:(誰說寫代碼是體力活?)

大師說,類型模板參數(type template parameter,如上例中的Item)也有可能造成重復的代碼生成。
NewShop?<int,?32>?intShop;
NewShop?
<long,?32>?longShop;

上面的代碼雖然模板參數Item的輸入不一樣(int和long),但是由于很多平臺上long和int是一樣長度的,就使得傻乎乎的編譯器又一次為了實際上一樣的類型生成了重復的函數(兩個SellIt)
這個時候就要求程序員能夠意識到不同類型的數據是否為一樣的存儲長度(binary representation),如果是,就用對付非類型模板參數相同的方法來解決。
posted on 2010-04-06 09:17 Justin.H 閱讀(1426) 評論(0)  編輯 收藏 引用 所屬分類: Effective C++ 炒冷飯
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            精品51国产黑色丝袜高跟鞋| 久久久久国产一区二区三区| 欧美sm极限捆绑bd| 亚洲一区欧美二区| 亚洲图片在区色| 久色成人在线| 国产精品亚洲产品| 欧美xart系列在线观看| 亚洲一区二区三区四区五区午夜 | 亚洲一区二区成人| 性色av一区二区三区| 久久综合色一综合色88| 久久亚洲视频| 国产精品久久久99| 在线 亚洲欧美在线综合一区| 午夜在线播放视频欧美| 亚洲免费一区二区| 在线播放日韩| 欧美一级大片在线免费观看| 欧美伦理视频网站| 亚洲欧美日韩国产综合| 亚洲一区免费看| 久久久国产一区二区三区| 卡一卡二国产精品| 夜夜嗨网站十八久久| 久久亚洲春色中文字幕久久久| 亚洲网站在线看| 亚洲最新视频在线| 久久黄金**| 一区二区免费在线播放| 国产精品久久久久久亚洲调教| 国产一区二区三区免费不卡| 国产日韩精品视频一区| 一本一本久久a久久精品综合麻豆| 亚洲免费人成在线视频观看| 欧美精品啪啪| 亚洲天堂网站在线观看视频| 在线观看欧美日韩| 国产亚洲一二三区| 韩日视频一区| 黄网站免费久久| 亚洲午夜久久久久久久久电影网| 国产真实久久| 国产欧美日韩精品在线| 日韩亚洲一区二区| 亚洲国产精品成人va在线观看| 性欧美video另类hd性玩具| 欧美福利在线| 一本色道久久精品| 亚洲黄网站黄| 久久只有精品| 欧美v亚洲v综合ⅴ国产v| 亚洲精品五月天| 亚洲人被黑人高潮完整版| 女同性一区二区三区人了人一| 亚洲人成亚洲人成在线观看图片 | 亚洲一区国产精品| 国产视频精品免费播放| 久久综合久久综合这里只有精品 | 亚洲高清视频一区二区| 欧美日韩一区二区三区四区五区| 亚洲一级二级在线| 午夜影院日韩| 亚洲一区久久久| 麻豆成人综合网| 欧美一区免费| 欧美另类视频在线| 久久久中精品2020中文| 欧美激情精品久久久六区热门 | 91久久精品美女| 亚洲视频精选在线| 亚洲国产精品一区二区第一页 | 亚洲欧洲一区| 永久域名在线精品| 亚洲影视在线| 亚洲主播在线| 欧美黄色精品| 激情综合中文娱乐网| 中文av一区二区| 亚洲综合色婷婷| 国产精品嫩草影院一区二区| 99精品视频一区二区三区| aa级大片欧美三级| 欧美日韩亚洲国产精品| 亚洲精品在线免费观看视频| 夜夜嗨av一区二区三区网页| 欧美日韩国产首页在线观看| 亚洲日本电影在线| 国产一区在线免费观看| 亚洲欧美国产一区二区三区| 久久久久九九九九| 在线观看欧美激情| 欧美性色aⅴ视频一区日韩精品| 一区二区三区 在线观看视频| 亚洲欧美激情精品一区二区| 国产日韩欧美亚洲| 亚洲剧情一区二区| 久久久一本精品99久久精品66| 欧美成年人视频| 国产精品99久久久久久久女警| 久久国产精品一区二区三区| 亚洲国产精品第一区二区| 欧美精品在线一区二区| 性做久久久久久久久| 亚洲人在线视频| 欧美1区3d| 欧美中文字幕视频| 亚洲少妇诱惑| 亚洲激情另类| 一区二区三区自拍| 国产欧美日韩精品丝袜高跟鞋 | 欧美护士18xxxxhd| 亚洲一区二区视频在线| 亚洲国产毛片完整版| 黄色成人av| 黄色精品免费| 樱桃国产成人精品视频| 国产热re99久久6国产精品| 欧美理论在线播放| 欧美日韩国产精品自在自线| 蜜臀av一级做a爰片久久| 久久精品在线观看| 久久看片网站| 欧美激情四色| 欧美日韩在线播放三区| 欧美日韩国产一中文字不卡| 欧美激情视频给我| 欧美日韩在线三区| 国产精品嫩草久久久久| 国产亚洲欧洲一区高清在线观看 | 牛牛精品成人免费视频| 欧美国产乱视频| 欧美日韩国产高清| 国产亚洲欧洲| 亚洲在线视频| 欧美大尺度在线| 亚洲一区二区三区国产| 久久视频精品在线| 国产精品美女久久久久久免费| 国产欧美一区二区精品秋霞影院| 狠狠色狠狠色综合日日五| 日韩午夜免费视频| 美女爽到呻吟久久久久| 亚洲调教视频在线观看| 免费在线成人av| 国产亚洲欧洲| 欧美亚洲免费高清在线观看| 亚洲黄色尤物视频| 麻豆国产精品va在线观看不卡| 国产亚洲欧美aaaa| 欧美在线观看www| 亚洲一二三级电影| 欧美成人黄色小视频| 亚洲在线1234| 国产日韩欧美高清| 久久精品一二三| 久久精品最新地址| 一区二区在线视频播放| 久久视频一区| 久久午夜国产精品| 亚洲激情视频| 在线综合+亚洲+欧美中文字幕| 欧美日韩国产亚洲一区| 亚洲伊人一本大道中文字幕| 亚洲丝袜av一区| 国产在线拍揄自揄视频不卡99| 久久久青草婷婷精品综合日韩| 久久九九免费| 99re国产精品| 欧美影院成年免费版| 亚洲二区视频| 亚洲综合日韩| 亚洲国产毛片完整版 | 亚洲精品影院在线观看| 欧美99在线视频观看| 亚洲天堂第二页| 久久久久久久久蜜桃| 亚洲调教视频在线观看| 欧美在线播放一区| 一区二区三区三区在线| 久久高清免费观看| 一区二区精品| 久久精品视频免费| 亚洲天堂免费在线观看视频| 欧美亚洲系列| 亚洲综合精品| 欧美区国产区| 欧美国产日韩视频| 狠狠干狠狠久久| 欧美一区二区在线观看| 香蕉久久a毛片| 国产亚洲精品久久久久动| 日韩视频在线观看国产| 日韩视频二区| 欧美精品三区| 亚洲黄一区二区三区| 欧美一区二区三区在线看 | 久久久久久久久伊人| 欧美伊久线香蕉线新在线| 国产精品久久看|