我试图通过使用继承和嵌套类来模仿STL迭代器的声明方式。
我有一个包含嵌套类Iterable
的父类iterator
。
class Iterable
{
public:
class iterator
{ };
};
我有两个类List
和Vector
,它们继承自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::iterator
(Iterable
和{{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
{ };
};
然而,这是一个次优的工作:
List::iterator lIte;
Vector::iterator vIte;
lIte = vIte;
继承的每个类中的代码重复。Iterable
类从iterator
继承适当的构造函数。 我的问题是,如何在不重复代码或使用C ++ 11构造函数继承的情况下使Iterable::iterator
和List::iterator
成为不同的类型?