抽象基类(C ++)中的嵌套类定义

时间:2009-06-20 07:19:00

标签: c++

是否有关于如何使用嵌套类 iterator 的建议  在C ++中ABC?注意,我还想要一个返回的虚函数 这个类的实例。

更具体地说,这是我的方法:

class ABC {
        typedef iterator<forward_iterator_tag, MyType> MyTypeIter;
        virtual MyTypeIter *begin() = 0;
};

class Foo : ABC {
        MyTypeIter : public ABC::MyTypeIter;
        virtual MyTypeIter *begin();
};

ABC::MyTypeIter *Foo::begin()
{
        Foo::MyTypeIter *ret;
        ret = new Foo::MyTypeIter(...);
        return ret;
}

有没有比这更好的方法(例如不使用指针的方法)?

3 个答案:

答案 0 :(得分:1)

你有什么问题?嵌套类的行为与顶级类的行为相同,因此您可以像返回任何其他类一样返回其对象。

答案 1 :(得分:0)

看看如何为std :: vector类实现迭代器,例如。

答案 2 :(得分:0)

我更喜欢将迭代器保持在类的内部,并且只显示一个迭代接口。
例如,您可以使用以下方法实现List<>

  • void prepare_iteration() // reset the internal iterator
  • bool step_iteration() // move internal iterator
  • DATA_TYPE & read() // return the data by using the iterator
  • write( DATA_TYPE & ) // update the data by using the iterator

在这个例子中,迭代器可以是一个简单的节点指针,它永远不会暴露给用户。 我发现这种方法比迭代器对象更容易和更安全。
(“更安全”部分需要大量讨论)

  1. 上述界面可以实现为抽象类。
  2. 您的容器(或其他)类可以继承并实现它。
  3. 我知道这不是您正在寻找的答案,但这只是设计课程的另一种想法。