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

Lyt
posts - 16,comments - 61,trackbacks - 0
最近由于需要頻繁使用Dictionary,于是就動手實現(xiàn)了一個,希望和List可以隨意地換來換去。
//IList.h
template<typename _Type>
class IIList : public ICollection<_Type>{};

//List.h
template<typename _Type>
class List : public IList<_Type>{};

//IDictionary.h
template<typename TKey, typename TValue>
class IDictionary : public ICollection<Pair<TKey, TValue>>{};
我希望IDictionary.h提供一個ToList() GetKeys() GetValues() 的操作,如果返回IList:

error C2682: cannot use 'dynamic_cast' to convert from 'const Lyt::Collection::List<_Type> *' to 'Lyt::Collection::IList<_Type> *' e:\c++\library\library\library\collection\dictionary.h 171

為啥會有編譯錯誤,至今不明,明明List繼承了IList怎么還會轉(zhuǎn)換失敗=  =

還有另外一個問題,在實現(xiàn)GetKeys()時,我希望是返回IList而非List,這樣如果我以后有其他關(guān)于List的實現(xiàn)就不需要修改代碼了,考慮到內(nèi)存泄漏的問題,我只想到兩種解決方法,不知道到底怎么折騰才合適,求解答。

//方法一
#include "List.h"
template
<typename TKey, typename TValue>
class Dictionary : public IDictionary<TKey, TValue>
{
protected:
  List
<Pair<TKey, TValue>> Data;
public:
  AutoPtr
<IList<Pair<TKey, TValue>>> GetKeys()const
  {
    AutoPtr
<IList<Pair<TKey, TValue>>> Result=new List<TKey>//用引用計數(shù)實現(xiàn)的智能指針
    /**/
  }
};

//方法二
#include "List.h"
template
<typename TKey, typename TValue>
class Dictionary : public IDictionary<TKey, TValue>
{
protected:
  List
<Pair<TKey, TValue>> Data;
  List
<TKey> Keys; //本來我只需要一個List來存放東西就夠了,這樣我在其他的Add、Remove等操作中都要多折騰一個Keys,是不是沒有必要?
public:
  
const IList<TKey>* GetKeys()const
  {
    
return dynamic_cast<IList<TKey>*>(&Keys);
  }
};
posted on 2009-10-15 09:44 Lyt 閱讀(1482) 評論(5)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)

FeedBack:
# re: Dictionary的囧狀
2009-10-15 13:43 | OwnWaterloo
1.
error C2682: cannot use 'dynamic_cast' to convert from 'const Lyt::Collection::List<_Type> *' to 'Lyt::Collection::IList<_Type>
 
明白了嗎?
 
2.
IDictionary.h  include  List.h
Dictionary.h include IDictionary.h
相互包含在哪?
 
 
 
C++不是這么用的……  被C#熏昏頭的同學……
  回復  更多評論
  
# re: Dictionary的囧狀
2009-10-15 15:39 | Lyt
@OwnWaterloo
沒有相互包含的狀況,抱歉…
已經(jīng)解決const的問題了,謝。

數(shù)據(jù)結(jié)構(gòu)的確是模仿.NET的,呃,不太明白為什么你說C++不是這么用的?  回復  更多評論
  
# re: Dictionary的囧狀
2009-10-15 22:30 | OwnWaterloo
@Lyt
你也發(fā)現(xiàn)問題了不是? 內(nèi)存不好管理。

如果你用GP的思想去實現(xiàn)Dictionary, GetKeys可以很簡單,并且很高效的實現(xiàn)。
用OOP? 就等著承受虛函數(shù)開銷以及內(nèi)存管理的困擾吧。。。
然后,你又會為此去寫智能指針, 寫內(nèi)存池, 寫鎖 ……

你可以把這些當作練習…… 但這不是C++的style ……  回復  更多評論
  
# re: Dictionary的囧狀
2009-10-15 22:52 | OwnWaterloo
我說具體一點吧……
如果用GP(代碼一切從簡):
 
template<typename T>
class /*array*/list {
    T *first,*last_;
public:
    typedef T* iterator;
    typedef const T* const_iterator;
 
    iterator begin() { return first_; }
    iterator end() { return last_; }
    const_iterator begin() const { return first_; }
    const_iterator end() const { return last_; } 
    // ...
};
 
要迭代一個容器:
list<int> l;
for ( list<int>::iterator first = l.begin(), last = l.end(), first!=last; ++first)
    visit_element( *first );
 
而你遇到的問題就是:
list<pair<key,value> > d;
如何得到一個迭代器, 僅僅訪問key部分, 而不訪問value部分。
 
template<class It>
class project_first {
    It it_;
public:
    project_first( It it ) : it_(it) {}
    typename std::iterator_traits<It>::value_type::first_type&
        operator*() const { return it->first; }
    // 再實現(xiàn) ++, -- +n 等操作...
};
 
for ( project_first first = d.begin(), last = d.end(); first!=last; ++first)
    visit_key( *first );
 
 
如果d是 list<tuple<key,value> > 類型, project_iterator還可以做得更范化一些。
 
沒有虛函數(shù)調(diào)用,沒有動態(tài)內(nèi)存分配。
并且,和stl的算法,boost的算法,以及其他C++組件合作良好。
  回復  更多評論
  
# re: Dictionary的囧狀
2009-10-15 23:14 | OwnWaterloo
C#的template能做什么我不太清楚。

C++支持編譯時的ducking type機制。
拋棄這種強大的抽象機制不用, 轉(zhuǎn)而在C++這種暫不提供GC的語言中使用接口來作為數(shù)據(jù)結(jié)構(gòu)之間的紐帶 ……
所以…… 我說這不是C++的style ……

還有一些小地方。 比如main 的返回類型是int, 而不是C#中的void。
以單下劃線接大寫字母開頭,以及以雙下劃線開頭的標識符在C++中是被保留的。
最好不要將C#中的那些習慣帶到C++中來……
用Type, Type_, 別用_Type。

這些被保留的標識符不會被永遠保留。 _Bool, _LongLong, _Complex已經(jīng)出現(xiàn)。



http://m.shnenglu.com/Streamlet/
這位同學, 和你在做類似的事情, 也遇到了類似的問題。
你可以參考參考……  回復  更多評論
  

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            午夜精品一区二区三区在线播放| 狼人社综合社区| 久久久久久久高潮| 香蕉久久国产| 欧美在线一二三区| 久久久天天操| 欧美r片在线| 亚洲破处大片| 欧美激情亚洲自拍| 亚洲精品社区| 亚洲影视在线播放| 久久精品道一区二区三区| 久久免费国产| 欧美看片网站| 国产精品永久免费在线| 国产中文一区| 亚洲日本在线视频观看| 亚洲丝袜av一区| 国产精品爱啪在线线免费观看| 国产精品久久7| 精品成人一区二区三区| 亚洲精品久久久久久一区二区| 一区二区三区视频在线| 性视频1819p久久| 欧美顶级大胆免费视频| 久久精品国产69国产精品亚洲| 久久综合九色99| 亚洲国产欧美一区| 99国产精品久久久久久久| 新片速递亚洲合集欧美合集| 久久国产精品高清| 亚洲欧美文学| 欧美高清在线视频| 亚洲一区激情| 欧美三级第一页| 亚洲经典三级| 久久天堂成人| 中日韩午夜理伦电影免费| 美女999久久久精品视频| 国产欧美不卡| 一本色道久久加勒比精品| 一区二区三欧美| 久久精品亚洲国产奇米99| 欧美日一区二区在线观看| 狠狠入ady亚洲精品经典电影| 一区二区三区高清在线| 麻豆久久精品| 亚洲在线视频网站| 欧美久久视频| 91久久精品日日躁夜夜躁国产| 香蕉久久夜色精品国产使用方法| 国产精品国码视频| 亚洲免费播放| 欧美激情一区二区三区在线视频| 午夜精品美女久久久久av福利| 免费成人小视频| 激情成人av| 亚洲调教视频在线观看| 免费不卡在线观看| 久久综合网络一区二区| av成人免费| 久久夜色精品国产欧美乱极品| 欧美日韩在线视频首页| 亚洲日产国产精品| 久久亚洲春色中文字幕| 9l国产精品久久久久麻豆| 农村妇女精品| 久久另类ts人妖一区二区| 韩日欧美一区二区| 久久亚洲图片| 久久视频一区| 亚洲精品视频二区| 亚洲福利视频网| 欧美xart系列高清| 免费视频亚洲| 一区二区欧美日韩视频| 亚洲免费大片| 国产精品久久久久久亚洲调教 | 欧美日韩国产三区| 一区二区三区欧美日韩| 一本久久知道综合久久| 国产精品一区二区久久精品| 久久精品论坛| 欧美暴力喷水在线| 亚洲一区二区免费在线| 午夜伦欧美伦电影理论片| 精品999在线播放| 最新日韩精品| 亚洲欧美另类久久久精品2019| 国产精品一区在线播放| 久久成人免费视频| 欧美午夜性色大片在线观看| 亚欧成人在线| 亚洲精品久久久久中文字幕欢迎你| 亚洲国产精品久久精品怡红院| 欧美激情一区在线| 欧美亚洲综合网| 亚洲福利视频网| 欧美一级大片在线观看| 亚洲人成网在线播放| 免播放器亚洲一区| 妖精成人www高清在线观看| 裸体女人亚洲精品一区| 午夜一区二区三区不卡视频| 蜜桃久久av一区| 欧美日韩一区在线| 亚洲欧美日韩精品久久| 先锋影音久久久| 91久久综合| 亚洲视频一区二区| 亚洲国产欧美在线人成| 亚洲一区三区视频在线观看| 亚洲精品1区2区| 久久国产视频网| 亚洲欧美在线另类| 欧美日韩激情网| 亚洲福利视频专区| 亚洲成人在线| 午夜精品视频在线观看| 99在线精品视频| 亚洲欧美另类中文字幕| 亚洲天堂激情| 久久蜜桃香蕉精品一区二区三区| 亚洲影院免费观看| 亚洲一区二区在线免费观看| 亚洲一区二区日本| 亚洲久色影视| 久久综合九色综合网站| 西瓜成人精品人成网站| 欧美日韩在线大尺度| 亚洲精品系列| 99在线热播精品免费| 欧美理论在线播放| 亚洲欧洲一区二区三区| 亚洲人成在线观看网站高清| 久久嫩草精品久久久精品一| 久久裸体视频| 狠狠色狠狠色综合系列| 久久久www成人免费毛片麻豆| 久久精品国产99国产精品| 国产精品一区二区欧美| 午夜精品剧场| 麻豆精品在线播放| 亚洲激情二区| 欧美片第一页| 亚洲午夜精品久久| 欧美自拍偷拍| 国产在线欧美日韩| 美女诱惑黄网站一区| 亚洲欧洲精品一区二区| 亚洲裸体俱乐部裸体舞表演av| 欧美成年人在线观看| 亚洲国产免费| 亚洲欧美日韩精品在线| 国产精品一卡二卡| 欧美在线影院| 亚洲福利视频一区二区| 一本色道久久综合亚洲精品小说 | 久久色在线观看| 136国产福利精品导航网址应用 | 9i看片成人免费高清| 午夜视频一区在线观看| 国产一区二区三区观看| 久久久久久久精| 亚洲精品你懂的| 一区二区三区四区国产| 国产精自产拍久久久久久| 久久人91精品久久久久久不卡| 亚洲国产天堂久久综合| 亚洲尤物视频网| 极品日韩久久| 欧美视频一区在线观看| 欧美综合77777色婷婷| 欧美激情在线观看| 亚洲一区二区在线免费观看视频 | 在线不卡亚洲| 国产精品黄色在线观看| 久久亚洲风情| 亚洲欧美日韩天堂| 亚洲成人在线视频网站| 亚洲一区二区三区四区五区黄| 国产一区二区| 国产精品成人一区二区三区吃奶 | 欧美日韩一卡二卡| 久久精品噜噜噜成人av农村| 一区二区日韩欧美| 狠狠色丁香久久婷婷综合_中| 欧美视频一区二区三区在线观看| 久久精品国产欧美激情| 一区二区三区你懂的| 欧美一区二区三区免费在线看| 亚洲日本一区二区三区| 国产亚洲网站| 国产精品男gay被猛男狂揉视频| 另类av导航| 久久国产66| 久久成人免费日本黄色| 亚洲午夜久久久久久久久电影网| 欧美激情自拍| 美国成人直播|