Напоминаю, вот классическая иерархия классов этой проблемы:
Код: Выделить всё
B
/ \
C1 C2
\ /
D
Моя проблема в том, что B и C1 взяты из SDK, который я не могу изменить.
Пример ниже, где я не могу заставить SubClassB виртуально наследовать от Base.
Классы: PureVirtualBase, Base и SubClassB взяты из используемого мной SDK. Я не могу их изменить.
SubClassA и Leaf — мои собственные классы. Я могу их изменить.
Код: Выделить всё
PureVirtualBase(SDK)
|
Base(SDK)
/ \
SubClassA SubClassB(SDK)
\ /
Leaf
- Экземпляр Leaf содержал только одну Base
- Избегайте двусмысленности при попытке доступа к функциям, определенным в чисто виртуальном виде в PureVirtualBase и реализованным в BaseBase
Код: Выделить всё
class PureVirtualBase
{
public:
PureVirtualBase()
{
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/10027053/how-to-create-a-diamond-inheritance-hierarchy-when-i-cannot-modify-all-of-the-ba[/url]
Мобильная версия