When virtual inheritance IS a good design?

If you have an interface hierarchy and a corresponding implementation hierarchy, making the interface base classes virtual bases is necessary. E.g. struct IBasicInterface { virtual ~IBasicInterface() {} virtual void f() = 0; }; struct IExtendedInterface : virtual IBasicInterface { virtual ~IExtendedInterface() {} virtual void g() = 0; }; // One possible implementation strategy struct CBasicImpl … Read more