【问题标题】:What to return as an iterator when there is no container?没有容器时作为迭代器返回什么?
【发布时间】:2011-06-21 01:06:11
【问题描述】:

我有一个对象的继承结构,其中 begin() 和 end() 作为基类中的纯虚拟成员函数。我计划从这些对象构建一个复合结构。这个内部对象有 std::vector 成员 begin() 和 end() 从中获取数据。但是在叶子类中没有向量。现在我尝试在叶子类中找到 begin() 和 end() 的返回值。有什么好的方法可以做到这一点?

最简单的方法是在没有元素的叶子类中添加一个向量成员来为 begin() 和 end() 提供燃料,但这感觉不对。

【问题讨论】:

  • 为什么感觉不对?这对我来说似乎相当直观。
  • 如果不是所有派生类都可以有意义地实现一个函数,那么该函数是否在基类中?对我来说,这听起来像是糟糕设计的产物。
  • 我们有没有机会看到虚拟基类的beginend 实现?
  • 为叶子创建一个完全不同的类而不是节点的具体原因是什么?
  • @SoapBox 如果你仔细阅读你会发现'inner object' 和'leaf classes' 指的是复合模式。人们可能期望叶类没有任何后代,而内部类有。

标签: c++ inheritance iterator


【解决方案1】:

您可以在叶类中实现一个非常简单的迭代器类,它只返回虚拟迭代器。例如。 begin() 返回与 end() 返回相同的迭代器。您还需要实现一些比较功能。我不太确定 std::iterator 是如何处理这个问题的,但也许这有一些你需要的东西。

【讨论】:

  • 如果begin()end() 是虚拟覆盖,它们需要返回特定类型。所以在这里使用虚拟类将无济于事。
  • 我会研究一下,自定义迭代器似乎是一个很好的方法。谢谢
猜你喜欢
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 2021-07-11
  • 2020-09-13
  • 2017-02-07
  • 2010-12-19
相关资源
最近更新 更多