我试图实现以下继承关系。联盟虚拟继承
Variable
/ \
... GlobalVar LocalVar ...
\ /(either)
ExtendedVar // Essentially with more fields
我基本上希望它延长Variable
子类中的一个,而选择在运行时做出。虚拟继承并不能完全解决问题。如果ExtendedVar
继承GlobalVar
和LocalVar
,并且当我需要调用某个成员funciton时,我无法指定要为该函数使用哪个基类。
此代码似乎工作。
class ExtendedVar : public Variable /* ExtendedVar is-a Variable */ {
Variable& var; // wraps a var in it. This is the var to extend.
std::string some_field;
}
但它在继承中带有一个不必要的副本。或者我可以再多上几门课,例如ExtendedGlobalVar
和ExtendedLocalVar
,这对维护显然是不利的。
有没有更好的选择?
https://stackoverflow.com/questions/49002/prefer -composition-over-inheritance – CoryKramer
这实际上并不十分清楚你想要做什么,但是你可能需要''D''中的成员'A *'(或者某个智能变体或'A&')而不是继承。 –
@CoryKramer,感谢您的链接,但我希望A的全部接口,并扩展A的子类之一... – YiFei