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

隨筆 - 8  文章 - 26  trackbacks - 0
<2025年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用鏈接

留言簿(5)

隨筆檔案

文章分類

文章檔案

相冊

C++語言

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

轉(zhuǎn)載自:http://dev.csdn.net/article/3/3354.shtm
 

/*******************************************************************************
 *  SGI*STL是STL之父Alexander Stepanov和STL巨匠Matt Austern等人的作品, 是當(dāng)今  *
 *  最富盛名、最出色的STL實現(xiàn)版本,全部源代碼和說明文檔可從www.sgi.com/STL/下  *
 *  載, 是我們學(xué)習(xí)STL的最佳范本. 但是眾所周知, STL使用了大量復(fù)雜艱深的C++特性, *
 *  加上STL本身的復(fù)雜和龐大, 使得閱讀代碼本身就成為一件非常困難的工作. 以下文  *
 *  字是我在學(xué)習(xí)STL過程中得到的一些經(jīng)驗和猜測, 希望能對大家有所幫助, 更希望能  *
 *  得到大家的批評和指正, 以利于我們的共同提高.                                *
 *                                                                      myan   *
 *******************************************************************************/

在SGI*STL源代碼里, typename這個新的C++關(guān)鍵字得使用可以說是隨處可見. 很多以前學(xué)習(xí)過
C++的人可能還不認(rèn)識typename, 其實它的常規(guī)用法很簡單: 在聲明模板函數(shù)或者模板類時,
傳統(tǒng)的寫法:
template <class T>
generic_function() {
//........
}

亦可以寫成
template <typename T>
         ------------
generic_func() {
//...............
}
引入這個關(guān)鍵字主要是為了避免class可能給人帶來的混淆.
本來typename的用法就是這么簡單, 但是STL源代碼中還有typename的一種不常見的用法, 如果
不了解, 閱讀源代碼時就會遇到困難. 因為目前我找不到有關(guān)這個問題的說明, 所以自己試驗了
一下, 得到一個猜測, 現(xiàn)簡介如下, 請有識之士斧正.

首先看一段SGI*STL源代碼, 摘自stl_iterator.h

1: template <class _Container, class _Iterator>
2: inline insert_iterator<_Container> inserter(_Container& __x, _Iterator __i)
3: {
4:   typedef typename _Container::iterator __iter;
5:   return insert_iterator<_Container>(__x, __iter(__i));
6:  }

令人費解的部分在第四行. 請大家在看我的解釋之前先想一想, 我不敢保證下面解釋的正確性和
全面性.

解釋:
    我認(rèn)為typename的語義是: 通知編譯器, 在typename后面被聲明的東西是一個類型, 而不是別的
什么東西.

 

 1例子:
 2// tpname.cpp
 3#include <iostream>
 4#include <typeinfo>  // for typeid() operator
 5
 6using namespace std;
 7
 8template <typename TP>
 9struct COne {   // default member is public
10    typedef TP one_value_type;
11}
;
12
13template <typename COne>   // 用一個模板類作為模板參數(shù), 這是很常見的
14struct CTwo {
15    // 請注意以下兩行
16    // typedef COne::one_value_type  two_value_type;   // *1
17    typedef typename COne::one_value_type  two_value_type;      // *2  
18}
;
19
20// 以上兩個模板類只是定義了兩個內(nèi)部的public類型, 但請注意第二個類CTwo的two_value_type類型
21// 依賴COne的one_value_type, 而后者又取決于COne模板類實例化時傳入的參數(shù)類型.
22
23int main()
24{
25    typedef COne<int> OneInt_type;
26    typedef CTwo< OneInt_type > TwoInt_type;
27    TwoInt_type::two_value_type i;
28    int j;
29    if ( typeid(i) == typeid(j) )   // 如果i是int型變量
30        cout << "Right!" << endl;   // 打印Right
31    return;
32}

33//  ~tpname.cpp
34

 

以上例子在Linux下用G++ 2.91編譯通過, 結(jié)果打印"Right". 但是如果把*1行的注釋號去掉, 注釋
*2行, 則編譯時報錯, 編譯器不知道COne::one_value_type為何物. 通常在模板類參數(shù)中的類型到
實例化之后才會顯露真身, 但這個CTwo類偏偏又要依賴一個已經(jīng)存在的COne模板類, 希望能夠預(yù)先
保證CTwo::two_value_type與COne::one_value屬于同一類型, 這是就只好請typename出山, 告訴
編譯器, 后面的COne::one_value_type是一個已經(jīng)存在于某處的類型的名字(type name), 這樣編譯
器就可以順利的工作了.

posted on 2008-06-24 21:56 楊彬彬 閱讀(235) 評論(0)  編輯 收藏 引用 所屬分類: 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>
            午夜精品一区二区三区在线播放 | 亚洲免费一级电影| 蜜桃久久精品一区二区| 亚洲国产日韩一区二区| 亚洲毛片av在线| 国产视频久久久久久久| 国产精品一区二区在线观看| 欧美精品激情| 欧美另类一区| 欧美日韩情趣电影| 欧美日韩精品免费观看视频| 欧美大胆a视频| 欧美视频精品一区| 国产精品午夜在线| 国产深夜精品| 亚洲精品在线一区二区| 日韩一区二区久久| 亚洲自拍三区| 久久精品一区二区国产| 欧美91视频| 99热精品在线| 亚洲欧美日本精品| 久久久999精品免费| 在线观看视频一区二区欧美日韩 | 久久久久青草大香线综合精品| 欧美一区网站| 亚洲国产精品va在线看黑人动漫| 亚洲黄网站在线观看| 亚洲视频国产视频| 老司机久久99久久精品播放免费| 欧美大片在线观看一区| 国产毛片久久| 久久一区视频| 欧美色精品在线视频| 亚洲成人资源| 久久久久成人精品免费播放动漫| 欧美激情久久久| 免费观看一级特黄欧美大片| 欧美顶级少妇做爰| 在线看片欧美| 蘑菇福利视频一区播放| 亚洲欧美日韩综合国产aⅴ| 欧美四级在线观看| 亚洲一级在线观看| 亚洲裸体俱乐部裸体舞表演av| 久久久久久久久久久一区| 国产午夜精品一区二区三区视频| 午夜精品一区二区三区在线视| 在线一区二区三区四区五区| 欧美久久九九| 在线视频欧美日韩| 亚洲伊人一本大道中文字幕| 欧美视频一区二区三区在线观看| 1000部精品久久久久久久久| 蜜臀久久99精品久久久画质超高清| 久久精品国产亚洲a| 激情五月综合色婷婷一区二区| 免费观看亚洲视频大全| 另类酷文…触手系列精品集v1小说| 精品二区久久| 99re视频这里只有精品| 欧美视频不卡中文| 麻豆成人在线| 欧美午夜激情视频| 久久精品盗摄| 国产精品美女999| 亚洲电影自拍| 欧美一级片久久久久久久 | 六十路精品视频| 欧美日韩国产高清视频| 久久精品一区二区国产| 欧美性猛交一区二区三区精品| 久久婷婷国产综合尤物精品 | 国内成人精品一区| 亚洲国产精品一区在线观看不卡 | 午夜精品久久久久影视| 亚洲丰满在线| 香港久久久电影| 午夜视频在线观看一区二区三区| 欧美国产日韩一区二区| 久久国产日韩欧美| 国产欧美日韩另类视频免费观看| 亚洲精品在线二区| 一区二区三区日韩欧美| 欧美日韩国产精品一区| 亚洲电影在线播放| 日韩视频中文字幕| 欧美日产在线观看| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲福利一区| 欧美插天视频在线播放| 亚洲第一在线| 欧美ab在线视频| 亚洲成色www久久网站| 亚洲国产一区二区三区青草影视 | 99re6热在线精品视频播放速度| 亚洲黄色大片| 国产精品爽爽爽| 久热精品在线视频| 一区二区91| 美国三级日本三级久久99| 精品动漫3d一区二区三区免费| 亚洲综合电影| 夜夜嗨av一区二区三区免费区| 欧美一区二区三区视频在线| 国产人成精品一区二区三| 久久精品国产成人| 亚洲综合色网站| 亚洲欧洲日本mm| 久久午夜电影网| 欧美在线观看日本一区| 日韩视频一区二区三区在线播放免费观看 | 亚洲欧美中文日韩在线| 国产精品狠色婷| 亚洲最新中文字幕| 国产欧美1区2区3区| 麻豆av福利av久久av| 欧美亚洲综合网| 亚洲一区欧美一区| 亚洲日本va午夜在线影院| 久久久在线视频| 久久亚洲国产精品日日av夜夜| 午夜欧美不卡精品aaaaa| 亚洲综合三区| 欧美在线一区二区| 久久综合中文| 久久香蕉精品| 久久手机免费观看| 欧美国产三区| 欧美日韩精品二区| 国产精品第一区| 在线观看日韩www视频免费 | 亚洲尤物精选| 欧美一区二区久久久| 久久九九热re6这里有精品 | 免费成人小视频| 亚洲狠狠丁香婷婷综合久久久| 一区二区欧美日韩| 亚洲小视频在线观看| 欧美一区二区三区在线观看| 欧美中文在线免费| 欧美黑人多人双交| 国产婷婷精品| 亚洲一区制服诱惑| 亚洲国产精品一区制服丝袜| 亚洲综合色视频| 欧美日韩国产一区| 亚洲国产成人精品视频| 亚洲综合精品四区| 亚洲黄色大片| 老司机免费视频一区二区| 国产日韩欧美| 欧美一区不卡| 亚洲欧美另类中文字幕| 国产精品海角社区在线观看| 伊人激情综合| 欧美mv日韩mv国产网站app| 亚久久调教视频| 国产欧美一区二区视频| 午夜激情综合网| 一区二区三区欧美日韩| 欧美日韩情趣电影| 先锋影音一区二区三区| 一本色道久久88精品综合| 欧美激情第六页| 亚洲欧美国产日韩中文字幕| 欧美成人精品三级在线观看| 亚洲黄页一区| 日韩视频在线永久播放| 欧美日韩美女| 欧美在线三级| 蜜臀a∨国产成人精品| 亚洲东热激情| 亚洲精品一二三区| 国产精品日日摸夜夜添夜夜av | 午夜精品在线| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 久久精品99国产精品日本| 午夜在线播放视频欧美| 精品999在线观看| 亚洲日本va在线观看| 国产精品一卡二| 欧美激情免费观看| 国产精品一级久久久| 久久综合一区二区| 国产精品第2页| 亚洲欧洲精品一区| 影音国产精品| 欧美亚洲综合久久| 亚洲一区视频| 欧美日韩精品一区二区三区四区| 久久久www免费人成黑人精品| 欧美日韩天堂| 亚洲欧洲午夜| 一区二区三区波多野结衣在线观看| 久久九九电影| 老司机精品视频一区二区三区| 国产精品美女午夜av| 一本大道久久a久久精二百| 亚洲乱码国产乱码精品精可以看|