KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am having a hard time with a dreaded diamond problem. For a reminder, here is the classical class hierarchy of this problem: B / \ C1 C2 \ / D To solve it, the standard solution is to make C1 and C2 use virtual inheritance to inherit from B. My problem is that B and C1 are from an SDK that I cannot modify. Example below where I cannot make SubClassB inherit virtually from Base . Classes: PureVirtualBase, Base and SubClassB are from the SDK I use. I cannot modify them. SubClassA and Leaf are my custom classes. I can change them. PureVirtualBase(SDK) | Base(SDK) / \ SubClassA SubClassB(SDK) \ / Leaf In such a situation where SubClassB cannot be changed to use virtual inheritance from Base . How what should so that: Leaf instance only contains one Base Avoid the ambiguity when trying to access functions defined pure virtual in PureVirtualBase and implemented in Base class PureVirtualBase { public: PureVirtualBase() { cout<<"<<PureVirtualBase::PureVirtualBase" << endl; cout<<">>PureVirtualBase::PureVirtualBase" << endl; } virtual int f_PureVirtualBase()=0; }; class Base : public PureVirtualBase { public: Base(std::string id) { cout<<"<<Base::Base:"<<id << endl; m_id=id; cout<<">>Base::Base:"<<m_id << endl; } virtual int f_PureVirtualBase() { cout<<"Base::f_PureVirtualBase" << endl; return 1; } private: std::string m_id; }; class SubClassA: public virtual Base { public: SubClassA(): Base("From
Tags (comma-separated)
Save Edits
Cancel