最近由于需要频繁使用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 阅读(1441)
评论(5) 编辑 收藏 引用 所属分类:
数据结构