Скажем, у меня 4 класса:
class I { public: virtual void X() = 0; };
class A : public virtual I { public: virtual void X() { } };
class B : public I { };
class C : public A, public B { };
I
, B
и C
являются абстрактными, а A
— нет. Если я просто добавлю virtual
к наследованию I
для B
, тогда A::X()
разрешает I::X()
в C
.
Однако я не могу изменить источник B
.
Мой вопрос:Могу ли я заставить A::X()
разрешить I::X
для C
без возможности изменить B
? Я пытался объявить A
и B
виртуальными для C
, но безрезультатно. Я пытаюсь не иметь избыточного кода (, например. пусть C объявляет X (){ A ::X (); } ). Любые аккуратные хаки?
Также -есть несколько вопросов, очень похожих на этот, но я не нашел ни одного разговора об использовании virtual
наследования. Пожалуйста, укажите мне один, если я пропустил его.