gpt4 book ai didi

c++ - 你不应该从 std::vector 继承

转载 作者:IT老高 更新时间:2023-10-28 11:28:37 25 4
gpt4 key购买 nike

好吧,这真的很难承认,但我现在确实有强烈的诱惑要从 std::vector 继承。

我需要大约 10 个自定义的 vector 算法,我希望它们直接成为 vector 的成员。但自然我也想拥有 std::vector 的其余接口(interface)。好吧,作为一个守法公民,我的第一个想法是在 MyVector 类中拥有一个 std::vector 成员。但随后我将不得不手动重新提供所有 std::vector 的接口(interface)。打字太多了。接下来,我想到了私有(private)继承,这样我就不用重新提供方法,而是在公共(public)部分使用 std::vector::member 编写一堆 。这其实也很乏味。



在这里,我确实认为我可以简单地从 std::vector 公开继承,但在文档中提供警告,即不应以多态方式使用此类。我认为大多数开发人员都有足够的能力理解这不应该被多态地使用。



我的决定绝对不合理吗?如果是这样,为什么?您能否提供一个替代方案,该替代方案将具有 实际上 其他成员但不涉及重新输入所有 vector 界面的内容?我对此表示怀疑,但如果可以,我会很高兴。



另外,除了一些白痴会写类似的东西



std::vector<int>* p  = new MyVector

使用 MyVector 还有其他现实危险吗?通过说现实,我放弃了想象一个函数,它需要一个指向 vector 的指针......

好吧,我已经说明了我的情况。我犯罪了。现在由你决定是否原谅我:)

最佳答案

其实std::vector的公共(public)继承并没有错。如果你需要这个,就去做吧。

我建议仅在真的必要时才这样做。只有当你不能用自由函数做你想做的事情时(例如,应该保持一些状态)。

问题在于 MyVector 是一个新实体。这意味着一个新的 C++ 开发人员在使用它之前应该知道它到底是什么。 std::vectorMyVector 有什么区别?哪一个更适合在这里和那里使用?如果我需要将 std::vector 移动到 MyVector 怎么办?我可以只使用 swap() 吗?

不要为了让某些东西看起来更好而产生新的实体。这些实体(尤其是如此常见的实体)不会生活在真空中。他们将生活在熵不断增加的混合环境中。

关于c++ - 你不应该从 std::vector 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4353203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com