Dictionary的囧状

Dictionary的囧状
最近由于需要频繁使用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);
  }
};

你可能感兴趣的:(Dictionary的囧状)