【发布时间】:2015-07-04 00:18:55
【问题描述】:
我知道 C++ 中的物理和虚拟继承。但是,我想知道这个模型是否可以通过任何设计模式或技巧来实现。
不应修改 E 和 F 类及其基类。想象它们来自外部库。
E 和 F 以下的所有内容都是开放的。可以引入中间帮助类、非成员函数、模板......所有可以实现这一点的东西:
BaseClass
/ \
/ \
A A
/ \ / \
/ \ / \
B C B D
\ / \ /
\ / \ /
E F
\ /
\ /
\ /
FinalClass
注意,E 和 F 不能共享一个 A。FinalClass 确实应该包含 2 个 A。 我的问题是,创建 E 或 F 需要 B、C 和 D 虚拟继承 A .. 但是,如果 A 是虚拟基类,那么编译器只会在 FinalClass 中创建一个 A 对象,而不是两个不同的那些。
所以,我想你们中的许多人会在这里推荐组合而不是继承。但是,组合在这里建模“具有”关系而不是“是”关系。 在解释中,我希望 FinalClass 真正表现得像 E 或 F,包括能够将其转换为这些类。
【问题讨论】:
-
你能把
A做成类模板吗? -
假设我可以。它会改变什么? B 类还必须决定要继承 A 的哪个特化。
-
如果你可以改变你的类名(模板只是一种改变类名的方法),你可以解决你的约束
template <class T> class B<T> : public virtual A<T> {
标签: c++ inheritance multiple-inheritance modeling virtual-inheritance