【发布时间】:2015-02-24 15:23:34
【问题描述】:
我有一个项目,我必须在其中创建一个包含 n 个容器的异构列表,其中将给出 n。容器可以是列表、队列或堆栈,它们中的每一个都必须实现bool member(T const& x) 方法,该方法检查容器中是否存在对象。我还必须为异构列表创建一个迭代器,它可以遍历所有容器的每个元素(不同容器中的所有元素将属于同一类型)。
我的想法是有一个包含member 方法的接口和 3 个新类,每个类都继承自接口和 stl 容器(我知道这是个坏主意,但我不想编写自己的列表,队列和堆栈类)。至于异构列表,我认为有一个类的数据成员是接口类的列表或向量。
我不知道该怎么做的事情是:我如何从一个泛型类型 T 的 stl 容器中完全继承。不知道这样的事情是否可以工作:
template <typename T>
class MyList : public list<T>, CommonInterface
另外我最大的问题是如何为异构列表制作迭代器,以便它可以遍历容器的所有元素。我的想法是将所有元素转移到一个向量对象,并使用它的迭代器(我猜是一种包装)。
欢迎对此问题提出任何想法和解决方案。如果问题有什么不清楚的地方,我会尽快澄清。
【问题讨论】:
-
这是一个坏主意 - STL 容器没有虚拟析构函数,因此如果您按照您的意愿进行操作,它们将不会被正确清理。见stackoverflow.com/questions/2034916/…
-
你已经有了迭代器,它支持一些异构
-
如果您决定继承 stl 容器,这在最后一个 cmets 中是一个坏主意,一旦在 scott meyers 的有效 stl 书中更精确地继承,一次应该私下而不是公开继承。
-
不要认为缺少虚拟析构函数会是个问题,因为这是一个学校项目,我不会创建那么多容器。你也可以澄清一下迭代器部分,因为我不知道如何做有问题的特定迭代器。谢谢:)
-
@MohamedAli 为什么要使用私有继承,那样我会丢失容器类的所有公共方法,我不想写公共方法只是为了调用它们。
标签: c++ list stl queue containers