c多态性和指针向量的问题
请考虑以下示例代码:
class Foo { }; class Bar : public Foo { }; class FooCollection { protected: vector<shared_ptr<Foo> > d_foos; }; class BarCollection : public FooCollection { public: vector<shared_ptr<Bar> > &getBars() { // return d_foos won't do here... } }; 我当前的项目中有这样的问题.客户端代码使用BarCollection,它存储指向d_foos中的Bars的指针,该指针在FooCollection中声明.我现在想要向客户端代码公开指向Bars的指针集合.我可以让客户端代码访问指向Foos的指针向量并将它们转换为指向客户端代码中的Bars的指针,但这感觉不对,因为客户端不必了解Foo的存在. 我还可以定义一个get()成员,它从d_foos中检索对象并强制转换它们,但这感觉非常笨拙.优选地,我想将d_foos作为向量< shared_ptr< Bar>返回. > &,但我似乎无法做到这一点. 也可能是我的设计完全错了.这似乎是最自然的解决方案,因为Bar是Foo的专业化,而BarCollection是FooCollection的专业化,它们共享功能. 您能否提出一些很好的解决方案来在BarCollection中实现getBars或更好的设计方案? 编辑: 事实证明我的设计确实很糟糕.尽管要求所有的FooCollection功能,但BarCollection不是FooCollection.我现在的解决方案基于以下答案 – 现在更清洁 – 现在: class Foo { }; class Bar : public Foo { }; template<class T> class Collection { vector<shared_ptr<T> > d_items; }; typedef Collection<Foo> FooCollection; class BarCollection : public Collection<Bar> { // Additional stuff here. }; 感谢所有优秀的建议和例子! 解决方法template<class T> class MyContainer { vector<shared_ptr<T> > d_foos; public: vector<shared_ptr<T> > & getVector(); }; class FooCollection : public MyContainer<Foo> { }; class BarCollection : public MyContainer<Bar> { }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |