在C ++中为继承的嵌套类提供单独的数据类型

时间:2014-04-27 18:56:34

标签: c++ inheritance nested-class

我试图通过使用继承和嵌套类来模仿STL迭代器的声明方式。

我有一个包含嵌套类Iterable的父类iterator

class Iterable
{
public:
    class iterator
    { };
};

我有两个类ListVector,它们继承自Iterable以获得嵌套类iterator

class List : public Iterable
{ };

class Vector : public Iterable
{ };

这允许声明像这样的迭代器。

   List::iterator lIte;
   Vector::iterator vIte;

但是,当尝试混合来自不同派生类的迭代器时,我想要编译时错误。 E.g。

lIte = vIte; // throw a compile error

但是,由于iterator来自同一个基类Iterable,上面的语句将编译得很好。

一个示例解决方法是定义一个新的嵌套类iterator,它将继承自Iterable::iteratorIterable和{{1}的每个类中的List }})。 E.g。

Vector

执行上述操作会在尝试执行以下操作时成功导致编译时错误:

class List : public Iterable
{
public:
    class iterator : Iterable::iterator // This "specializes" the datatype of iterator
    { };
};

class Vector : public Iterable
{
public:
    class iterator : Iterable::iterator
    { };  
};

然而,这是一个次优的工作:

  1. 它涉及从 List::iterator lIte; Vector::iterator vIte; lIte = vIte; 继承的每个类中的代码重复。
  2. 它需要C ++ 11才能使重复的Iterable类从iterator继承适当的构造函数。
  3. 我的问题是,如何在不重复代码或使用C ++ 11构造函数继承的情况下使Iterable::iteratorList::iterator成为不同的类型?

0 个答案:

没有答案