为了账号安全,请及时绑定邮箱和手机立即绑定

你不应继承性病:载体

你不应继承性病:载体

C++
米脂 2019-06-19 16:10:03
你不应继承性病:载体好吧,这确实很难招供,但我现在确实有很大的诱惑要继承。std::vector.我需要大约10个定制的矢量算法,我想让他们成为向量的直接成员。但自然我也希望std::vector作为一个守法的公民,我的第一个想法是std::vector成员MyVector班级,等级。但是,我必须手动重新提供所有STD:VINVERV的接口。打字太多了。接下来,我考虑了私有继承,因此,与其重新提供方法,不如编写一堆using std::vector::member在公共部门。这也很乏味。我在这里,我真的认为我可以直接从std::vector,但在文档中提供一个警告,说明不应以多形性方式使用该类。我认为大多数开发人员都有足够的能力来理解,无论如何都不应该使用这种方法。我的决定完全站不住脚吗?如果是,为什么?你能提供一个有额外成员的替代方案吗?其实成员,但不会涉及重新键入所有向量的接口?我很怀疑,但如果你能的话,我会很高兴的。另外,除了一些白痴可以写一些类似的东西std::vector<int>* p  = new MyVector还有其他的吗写实使用MyVector会有危险吗?通过说现实,我放弃了一些东西,比如想象一个函数,它把一个指向向量的指针.我已经陈述过我的案子了。我犯了罪。现在该由你来原谅我了:)
查看完整描述

3 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

实际上,公共继承没有任何问题。std::vector..如果你需要这个,就这么做。

我建议只有当它是真的是必要的。只有当你不能用自由的函数做你想做的事情时(例如,应该保持某种状态)。

问题是MyVector是一个新的实体。这意味着一个新的C+开发人员在使用它之前应该知道它是什么鬼东西。有什么区别std::vectorMyVector?哪一种更适合在这里和那里使用?如果我需要搬家呢std::vectorMyVector?我可以用一下吗swap()还是不?

不要产生新的实体只是为了使一些东西看起来更好。这些实体(特别是如此常见的)不会生活在真空中。它们将生活在不断增加的熵的混合环境中。


查看完整回答
反对 回复 2019-06-19
?
不负相思意

TA贡献1777条经验 获得超10个赞

整个STL都是这样设计的算法和容器是分开的。.

这导致了不同类型迭代器的概念:Const迭代器、随机访问迭代器等。

因此我建议你接受这个惯例设计您的算法时,它们不会关心它们正在处理的容器是什么-它们只需要执行操作所需的特定类型的迭代器。

另外,让我把你转到杰夫·阿特伍德的几句好话.


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 307 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信