好的,这确实很难让人承认,但是目前我确实有很强的诱惑力可以继承std::vector
。
我需要大约10种针对矢量的自定义算法,并且希望它们直接成为矢量的成员。但是我自然也希望拥有的其余std::vector
界面。好吧,作为守法公民,我的第一个想法是std::vector
MyVector
班级成员。但是然后我将不得不手动重新提供所有std :: vector的接口。输入太多。接下来,我考虑了私有继承,因此我将using std::vector::member
在公共部分写一堆,而不是提供方法。其实这也很乏味。
在这里,我确实确实认为我可以简单地从公开继承std::vector
,但是在文档中提供警告,该类不应被多态使用。我认为大多数开发人员都有足够的能力来理解,无论如何都不应多态地使用它。
我的决定绝对不合理吗?如果是这样,为什么?您能否提供一种替代方法,使其他成员实际成为成员,而不涉及重新键入vector接口的所有内容?我对此表示怀疑,但如果可以的话,我会很高兴。
此外,除了一些白痴可以写类似的事实
std::vector<int>* p = new MyVector
使用MyVector 还有其他现实的危险吗?通过说现实,我舍弃了像想象一个需要指向矢量指针的函数之类的事情。
好吧,我已经说了我的案子。我犯罪了。现在由你来原谅我:)
std::vector
的接口非常大,当C ++ 1x出现时,它将大大扩展。在未来几年中,要键入的内容很多,而且还有更多内容需要扩展。我认为这是考虑继承而不是包含的一个很好的理由-如果有人遵循那些功能应该是成员的前提(我对此表示怀疑)。不衍生自STL容器的规则是它们不是多态的。如果您不以这种方式使用它们,则不适用。