【问题标题】:Should a user-defined container that is a wrapper for std::vector, inherit or contain std::vector?作为 std::vector 包装器的用户定义容器是否应该继承或包含 std::vector?
【发布时间】:2014-02-04 18:28:31
【问题描述】:

作为 std::vector 包装器的用户定义容器是否应该继承或包含 std::vector?

我有一个应该是容器的类。我看到两个选项:

1) 从向量继承 2) 拥有一个私有成员向量并覆盖所有向量函数以使我的容器充当向量

我不确定这只是风格问题,还是一种方式从根本上更好 比别人好吗?

我要添加的额外功能很小,这里的数据成员和函数很少 在那里。大多数情况下,它是处理向量中数据的便捷函数。

【问题讨论】:

  • 您要添加什么样的额外功能?
  • 私有/受保护的继承呢?
  • @cmbasnett 最后我编辑了我的帖子。
  • @Xymotech 不确定你的意思是什么?为什么不从矢量公共继承?
  • @user3111311 什么样的数据成员?他们应该做什么?我问的原因是因为其他容器类型可能更适合您的需求,或者可能有更好的选择。

标签: c++ vector


【解决方案1】:

首先,STL 容器不应该被继承。他们甚至没有虚拟析构函数。

其次,最好选择组合/聚合而不是继承,因为这是一种耦合度较低的技术,对代码的限制/要求较少。

详情请见this answer,这个问题已经被提过很多次了。

【讨论】:

  • “首先,STL 容器不应该被继承。”在那之后我停止了阅读。这对我来说已经足够了!
【解决方案2】:

在此处阅读有关此主题的有趣信息 - Thou shalt not inherit from std::vector

与标题所暗示的不同,从 std::vector 继承是可以的,最终它更像是一个架构问题。它是否有助于重用或代码复杂性?通过这样做,是否更容易理解、维护和调试代码?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多