In my lib, I want export two interfaces called IB
and ID
. ID
should be an IB
, because I want use ID like an IB externally. Besides, I have two corresponding implementations, ImplB
and ImplD
, and ImplD
is an ImplB
too for the goal of using ImplD
like an ImplB
internally.
class IB{/*...*/};
class ID : public IB{/*...*/};
class ImplB : public IB{/*...*/};
class ImplD : public ID, public ImplB{/*...*/};
The code above will cause diamond inheritance problem.
IB
/ \
ImplB ID
\ /
ImplD
If I trying to avoid this by using virtual
inheritance
class ImplB : virtual public IB{};
class ID : virtual public IB{};
, then another potential performance issue (additional penalty for casting to IB from ID or ImplB) will arise.
So the question is:
Is this the case where the cost above can't be get rid of?
Or there is another way to bypass all of these above, and how?
Aucun commentaire:
Enregistrer un commentaire