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

Lyt
posts - 16,comments - 61,trackbacks - 0
最近由于需要頻繁使用Dictionary,于是就動(dòng)手實(shí)現(xiàn)了一個(gè),希望和List可以隨意地?fù)Q來(lái)?yè)Q去。
//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提供一個(gè)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

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

還有另外一個(gè)問題,在實(shí)現(xiàn)GetKeys()時(shí),我希望是返回IList而非List,這樣如果我以后有其他關(guān)于List的實(shí)現(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>//用引用計(jì)數(shù)實(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; //本來(lái)我只需要一個(gè)List來(lái)存放東西就夠了,這樣我在其他的Add、Remove等操作中都要多折騰一個(gè)Keys,是不是沒有必要?
public:
  
const IList<TKey>* GetKeys()const
  {
    
return dynamic_cast<IList<TKey>*>(&Keys);
  }
};
posted on 2009-10-15 09:44 Lyt 閱讀(1474) 評(píng)論(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#熏昏頭的同學(xué)……
  回復(fù)  更多評(píng)論
  
# re: Dictionary的囧狀
2009-10-15 15:39 | Lyt
@OwnWaterloo
沒有相互包含的狀況,抱歉…
已經(jīng)解決const的問題了,謝。

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

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

你可以把這些當(dāng)作練習(xí)…… 但這不是C++的style ……  回復(fù)  更多評(píng)論
  
# re: Dictionary的囧狀
2009-10-15 22:52 | OwnWaterloo
我說(shuō)具體一點(diǎn)吧……
如果用GP(代碼一切從簡(jiǎn)):
 
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_; } 
    // ...
};
 
要迭代一個(gè)容器:
list<int> l;
for ( list<int>::iterator first = l.begin(), last = l.end(), first!=last; ++first)
    visit_element( *first );
 
而你遇到的問題就是:
list<pair<key,value> > d;
如何得到一個(gè)迭代器, 僅僅訪問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; }
    // 再實(shí)現(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)用,沒有動(dòng)態(tài)內(nèi)存分配。
并且,和stl的算法,boost的算法,以及其他C++組件合作良好。
  回復(fù)  更多評(píng)論
  
# re: Dictionary的囧狀
2009-10-15 23:14 | OwnWaterloo
C#的template能做什么我不太清楚。

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

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

這些被保留的標(biāo)識(shí)符不會(huì)被永遠(yuǎn)保留。 _Bool, _LongLong, _Complex已經(jīng)出現(xiàn)。



http://m.shnenglu.com/Streamlet/
這位同學(xué), 和你在做類似的事情, 也遇到了類似的問題。
你可以參考參考……  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久久久国产精品mv| 欧美成人免费全部观看天天性色| 欧美亚洲免费在线| 亚洲欧美日韩在线一区| 中文在线一区| 久久成人精品视频| 久久综合久久综合久久综合| 欧美va天堂| 最新日韩在线视频| aaa亚洲精品一二三区| 亚洲专区一区| 欧美a级大片| 亚洲欧洲午夜| 亚洲影院在线| 榴莲视频成人在线观看| 亚洲国产精品悠悠久久琪琪| 亚洲免费观看| 久久精品视频网| 欧美精品日韩综合在线| 国产精品亚洲一区二区三区在线| 伊人成人开心激情综合网| 一区二区三区精品视频| 久久米奇亚洲| 99在线精品视频| 久久综合给合久久狠狠狠97色69| 欧美日韩精品欧美日韩精品一| 国产精品视频| 一本色道久久综合精品竹菊 | 国产精品久久久久久久久免费桃花| 亚洲综合清纯丝袜自拍| 亚洲欧美成人综合| 猛男gaygay欧美视频| 欧美视频不卡| 国产在线观看91精品一区| 一区二区三欧美| 久久蜜桃资源一区二区老牛| 久久久免费精品视频| 激情av一区二区| 久久精品国产99国产精品澳门| 欧美亚洲一区在线| 1000部国产精品成人观看| 美女福利精品视频| 久久久亚洲午夜电影| 久久综合狠狠综合久久激情| 日韩午夜av| 老司机免费视频久久| 国产三区精品| 香蕉国产精品偷在线观看不卡| 亚洲国产毛片完整版| 久久精品国产精品亚洲综合| 一区二区三区精密机械公司 | 日韩一级精品视频在线观看| 久久er精品视频| 午夜久久影院| 国产精品扒开腿爽爽爽视频 | 欧美精品尤物在线| 免费视频最近日韩| 黄色一区二区三区| 欧美成人在线免费观看| 久久精品毛片| 久久人人爽人人| 亚洲精品一二三| 亚洲欧美日韩综合aⅴ视频| 国产精品美女| 久久伊伊香蕉| 欧美成人亚洲成人| 欧美一区二区三区免费在线看| 欧美黄色片免费观看| 欧美一区二区在线免费观看| 亚洲一区在线播放| 久久国产精品久久久久久久久久 | 免费观看在线综合色| 国内成人在线| 久久蜜桃精品| 麻豆国产精品va在线观看不卡| 91久久香蕉国产日韩欧美9色 | 欧美亚洲综合另类| 激情欧美一区二区| 91久久精品一区二区三区| 欧美精选在线| 欧美一区二区大片| 久久网站热最新地址| 日韩视频永久免费观看| 日韩一本二本av| 国产亚洲欧美日韩一区二区| 欧美激情在线免费观看| 欧美午夜免费| 毛片一区二区三区| 欧美精品福利| 久久精品国产欧美激情| 免费亚洲电影在线| 性色av一区二区三区红粉影视| 欧美一区三区三区高中清蜜桃| 亚洲高清一区二| 亚洲一二三区在线观看| 午夜一区二区三区在线观看| 欧美一区二区观看视频| 蜜臀a∨国产成人精品| 国产情侣久久| 亚洲人成啪啪网站| 亚洲激情在线| 国产婷婷色一区二区三区在线 | 在线综合亚洲欧美在线视频| 欧美绝品在线观看成人午夜影视| 日韩视频在线免费观看| 亚洲欧美日本国产有色| 久久一区二区三区av| 欧美日本免费一区二区三区| 一本大道久久a久久精品综合| 在线亚洲免费| 欧美亚洲在线播放| 亚洲激情中文1区| 欧美视频在线播放| 欧美一区二区三区喷汁尤物| 夜夜嗨av一区二区三区网页 | 亚洲高清免费在线| 亚洲尤物在线| 亚洲国产电影| 亚洲午夜高清视频| 欧美www视频| 久久成人亚洲| 亚洲黄色影片| 欧美午夜精品久久久| 欧美大香线蕉线伊人久久国产精品| 亚洲欧美成人网| 欧美成人中文| 欧美好吊妞视频| 欧美va亚洲va国产综合| 国语自产精品视频在线看一大j8| 亚洲一区在线免费观看| 亚洲欧美成人一区二区三区| 亚洲另类黄色| 免费成人激情视频| 久久精品中文字幕一区二区三区 | 亚洲激情影院| 国产日韩欧美三级| 国产小视频国产精品| 国产精品日韩高清| 国产精品一区一区三区| 国产精品不卡在线| 国产精品久久久久久久久久ktv| 久久精品中文字幕一区| 久久久亚洲影院你懂的| 欧美成人免费网站| 国产亚洲激情| 亚洲国产天堂久久综合网| 国产欧美日韩在线视频| 免费视频一区| 亚洲精品在线电影| 午夜视频一区二区| 伊人成年综合电影网| 亚洲女优在线| 亚洲曰本av电影| 欧美一级在线亚洲天堂| 国产精品久久久久久久浪潮网站| 在线亚洲免费视频| 欧美一区二区精品在线| 国内精品久久久久久| 久久中文欧美| 99re6这里只有精品| 久久精品夜色噜噜亚洲aⅴ| 在线观看亚洲视频啊啊啊啊| 模特精品在线| 亚洲欧美日韩国产综合在线| 久久日韩精品| 国产精品久久久久久久午夜| 99re6热在线精品视频播放速度| 亚洲五月婷婷| 性做久久久久久久免费看| 欧美成人精品在线观看| 中国女人久久久| 伊人久久综合| 奶水喷射视频一区| 性久久久久久久| 狠狠综合久久av一区二区老牛| 美女日韩欧美| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲视频一区在线| 国产一区二区精品在线观看| 欧美激情小视频| 欧美伊人久久| 一区二区三区久久精品| 免费h精品视频在线播放| 亚洲一区二区三区激情| 怡红院精品视频| 国产精品午夜视频| 欧美激情精品| 巨乳诱惑日韩免费av| 午夜国产精品影院在线观看| 亚洲精品麻豆| 欧美va亚洲va香蕉在线| 性视频1819p久久| 在线中文字幕一区| 亚洲福利国产精品| 精品动漫一区| 国产视频一区欧美| 国产精品一区二区你懂的| 欧美日本国产精品| 欧美成人小视频| 欧美xart系列高清|