我希望有一些myObject
将存储SomeOtherObjects
的集合(类似于矢量)(因此,是同质的,对吗?),它应该是可迭代的,并且可以通过{{1}访问但也会有(myObject[i]).SomeOtherObjectField1
和myObject.doStuff()
等普通会员。
有没有选项来实现这样的类,或者使用私有std :: vector来保持对象(我试图避免 - 不喜欢私有std :: containers)会更聪明吗?
答案 0 :(得分:1)
如果您的目标是代码重用,则首选组合而不是继承。 (继承应该用于启用多态,在这种情况下似乎不是问题。)
答案 1 :(得分:1)
这看起来像composite design pattern。简而言之,您必须定义Object
类的接口并派生具体类,其中一些是其他类的容器。如上所述,组合方式更好,但使用通用接口是以相同方式使用“简单”对象或“复合”对象的方式。
MY2C
答案 2 :(得分:0)
我会使用private std::vector<>
和内联方法来返回对它的const引用。
你为什么不喜欢成员标准容器?
答案 3 :(得分:0)
通常,正确的结构方法在于澄清语义。你需要提出类似的问题 “myObject是一个向量&lt;&gt;?”。答案可能不是。如果你遵循一个类做一件事(凝聚力)的原则,那么它遵循矢量&lt;&gt;周围的句法糖。可能不是那么好。
它倾向于遵循vector<>
是私人会员。然后返回一个const引用没有问题。返回非const引用会破坏密码 - 也可能是公共数据。
如果您希望:
(myObject[i]).SomeOtherObjectMethod1();
然后通过operator[](unsigned index)
很容易实现。我怀疑你是否希望你最好保持一致并将myObject
本身视为一个容器。这意味着不向vector<>
提供const ref访问器并实现您真正需要的特定访问器方法。这将使客户端代码更容易理解。