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

Lyt
posts - 16,comments - 61,trackbacks - 0
最近由于需要頻繁使用Dictionary,于是就動手實現了一個,希望和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怎么還會轉換失敗=  =

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

//方法一
#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>//用引用計數實現的智能指針
    /**/
  }
};

//方法二
#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)  編輯 收藏 引用 所屬分類: 數據結構

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
沒有相互包含的狀況,抱歉…
已經解決const的問題了,謝。

數據結構的確是模仿.NET的,呃,不太明白為什么你說C++不是這么用的?  回復  更多評論
  
# re: Dictionary的囧狀
2009-10-15 22:30 | OwnWaterloo
@Lyt
你也發現問題了不是? 內存不好管理。

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

你可以把這些當作練習…… 但這不是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; }
    // 再實現 ++, -- +n 等操作...
};
 
for ( project_first first = d.begin(), last = d.end(); first!=last; ++first)
    visit_key( *first );
 
 
如果d是 list<tuple<key,value> > 類型, project_iterator還可以做得更范化一些。
 
沒有虛函數調用,沒有動態內存分配。
并且,和stl的算法,boost的算法,以及其他C++組件合作良好。
  回復  更多評論
  
# re: Dictionary的囧狀
2009-10-15 23:14 | OwnWaterloo
C#的template能做什么我不太清楚。

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

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

這些被保留的標識符不會被永遠保留。 _Bool, _LongLong, _Complex已經出現。



http://m.shnenglu.com/Streamlet/
這位同學, 和你在做類似的事情, 也遇到了類似的問題。
你可以參考參考……  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产一区二区| 久久久99久久精品女同性| 欧美一级理论片| 欧美一级久久久| 欧美一级在线视频| 欧美伊人精品成人久久综合97| 夜夜夜久久久| 亚洲欧美日韩综合国产aⅴ| 性做久久久久久免费观看欧美| 午夜精品久久久久久久男人的天堂| 亚洲一区中文| 欧美一区二区视频在线观看| 久久精品国产96久久久香蕉| 久久最新视频| 亚洲黄色一区二区三区| 亚洲日本视频| 欧美在线精品免播放器视频| 日韩午夜一区| 99精品国产福利在线观看免费 | 亚洲国产精品一区制服丝袜 | 亚洲电影在线| 亚洲欧洲视频在线| 亚洲一区二区在线免费观看| 久久激情五月丁香伊人| 牛牛国产精品| 亚洲午夜影视影院在线观看| 久久久久久国产精品mv| 欧美猛交免费看| 一区二区在线看| 亚洲欧美综合精品久久成人| 欧美成人中文| 销魂美女一区二区三区视频在线| 免费日韩av片| 国内自拍一区| 性色av一区二区三区在线观看| 欧美a级大片| 午夜精品久久久久久久男人的天堂| 麻豆精品传媒视频| 国产视频综合在线| 日韩一二三在线视频播| 久久久久久综合网天天| 日韩西西人体444www| 美女国产一区| 激情六月婷婷久久| 羞羞色国产精品| 日韩午夜剧场| 欧美日本三级| 亚洲精品日韩欧美| 免费国产一区二区| 欧美在线免费观看亚洲| 国产模特精品视频久久久久| 在线一区二区三区四区五区| 亚洲国产1区| 免费观看成人网| 狠狠入ady亚洲精品经典电影| 亚洲女同精品视频| 一区二区三区日韩在线观看| 欧美高清在线观看| 日韩视频一区二区在线观看| 欧美成人一区二区| 狂野欧美一区| 亚洲国产高清视频| 亚洲国产激情| 欧美日韩成人激情| 这里只有精品丝袜| 夜夜嗨av色综合久久久综合网| 欧美久久视频| 亚洲一区二区三区涩| 一区二区三区免费网站| 国产精品久久久久免费a∨大胸| 亚洲一区二区不卡免费| 99精品欧美一区二区三区| 欧美日韩一区二区三区高清| 99伊人成综合| 亚洲私人黄色宅男| 国产欧美一区二区精品忘忧草| 午夜精品在线观看| 久久精品国产精品| 伊人久久成人| 欧美高清在线观看| 欧美日韩亚洲一区在线观看| 亚洲综合色激情五月| 午夜天堂精品久久久久| 国产日韩精品一区| 免费成人黄色片| 欧美午夜不卡在线观看免费| 亚洲欧美一区二区三区久久| 久久国产精品久久久久久电车| 亚洲高清自拍| 亚洲综合首页| 亚洲三级电影全部在线观看高清| 亚洲乱码国产乱码精品精天堂 | 久久精品国产精品亚洲精品| 久久精品伊人| 亚洲午夜视频在线| 久久精品一区二区三区不卡| 亚洲精品亚洲人成人网| 在线亚洲+欧美+日本专区| 国内精品美女在线观看| 亚洲精品系列| 在线欧美亚洲| 亚洲综合视频在线| 日韩一级黄色av| 久久精品导航| 亚洲欧美日韩国产精品| 久久色中文字幕| 午夜精品久久久久久久99樱桃| 另类av一区二区| 欧美专区18| 欧美日韩视频一区二区| 麻豆精品一区二区av白丝在线| 国产精品美女久久久| 亚洲茄子视频| 亚洲精品在线观看免费| 欧美在线高清视频| 亚洲午夜日本在线观看| 美女国产一区| 久久香蕉国产线看观看av| 欧美午夜免费电影| 亚洲国产日韩一区| 亚洲国产精品电影| 久久永久免费| 欧美在线观看一区二区| 国产精品国产三级国产普通话三级| 欧美va天堂| 极品尤物av久久免费看| 欧美一区二区三区四区在线观看地址| 亚洲天堂男人| 欧美日韩一区二区三区免费看| 欧美夫妇交换俱乐部在线观看| 国内伊人久久久久久网站视频| 亚洲欧美日韩久久精品| 亚洲自拍偷拍色片视频| 欧美午夜激情视频| 亚洲午夜一区二区| 欧美一级成年大片在线观看| 欧美午夜精品电影| 亚洲一区二区三区在线| 亚洲女同同性videoxma| 一本综合久久| 国产精品久久久久久亚洲调教| 亚洲毛片视频| 欧美人成网站| 久久婷婷久久一区二区三区| 亚洲综合日韩中文字幕v在线| 亚洲精品免费网站| 女人天堂亚洲aⅴ在线观看| 久久久亚洲国产天美传媒修理工 | 一区二区三区四区五区视频| 国产精品欧美久久久久无广告| 欧美欧美天天天天操| 国产精品五月天| 在线天堂一区av电影| 亚洲欧美日韩综合国产aⅴ| 国产精品日本一区二区| 午夜精品视频在线观看| 久久综合九色欧美综合狠狠| 精品成人在线| 欧美超级免费视 在线| 亚洲精品日韩在线观看| 亚洲小少妇裸体bbw| 国产拍揄自揄精品视频麻豆| 欧美专区福利在线| 亚洲国产日韩欧美在线图片| 亚洲美女视频网| 国产精品国产| 久久久欧美一区二区| 亚洲福利精品| 欧美一二区视频| 最新中文字幕亚洲| 国产精品免费看久久久香蕉| 欧美一区二区三区在线观看视频 | 欧美亚洲网站| 在线观看亚洲精品| 欧美午夜电影在线| 久久精品国产91精品亚洲| 亚洲精选一区| 欧美freesex8一10精品| 午夜久久久久| 中文国产成人精品久久一| 国产亚洲精品v| 欧美午夜www高清视频| 噜噜噜噜噜久久久久久91| 中文在线资源观看视频网站免费不卡| 久久综合国产精品台湾中文娱乐网| 亚洲美女黄色| 亚洲国产高清在线观看视频| 国产美女精品一区二区三区| 欧美日韩精品是欧美日韩精品| 久久久精品日韩| 亚洲欧美中文在线视频| 亚洲精选大片| 91久久精品国产91久久性色tv| 久久精品亚洲一区二区三区浴池| 99视频在线精品国自产拍免费观看| 亚洲高清久久| 亚洲国产精品成人va在线观看| 久久精品日产第一区二区三区| 午夜精品久久久99热福利| 韩日欧美一区二区|