EDIT3: Пожалуйста, не забудьте четко понять, что я задаю, прежде чем отвечать (есть EDIT2 и много комментариев). Есть (или были) ответы на многие вопросы, которые ясно показывают непонимание вопроса (я знаю, что и моя вина, извините за это)
Привет, я просмотрел вопросы о виртуальном наследовании (class B: public virtual A {...}
) в С++, но не нашел ответа на мой вопрос.
Я знаю, что есть некоторые проблемы с виртуальным наследованием, но то, что я хотел бы знать, - это то, в каких случаях виртуальное наследование будет считаться хорошим дизайном.
Я видел, как люди упоминали интерфейсы типа IUnknown
или ISerializable
, а также что дизайн iostream
основан на виртуальном наследовании. Будут ли они хорошими примерами хорошего использования виртуального наследования, заключается в том, что нет лучшей альтернативы или потому, что виртуальное наследование является надлежащим дизайном в этом случае? Спасибо.
EDIT: Чтобы уточнить, я спрашиваю о реальных примерах, пожалуйста, не давайте абстрактных. Я знаю, что такое виртуальное наследование и какой шаблон наследования он требует, что я хочу знать, когда это хороший способ делать что-то, а не просто следствие сложного наследования.
EDIT2: Другими словами, я хочу знать, когда иерархия алмазов (которая является причиной виртуального наследования) - хороший дизайн