Когда виртуальное наследование - это хороший дизайн?

EDIT3: Пожалуйста, убедитесь, что вы четко поняли, о чем я спрашиваю, прежде чем отвечать (есть EDIT2 и множество комментариев). Есть (или были) много ответов, которые явно показывают неправильное понимание вопроса (я знаю, что это тоже моя вина, извините за это)

Привет, я просмотрел вопросы о виртуальном наследовании ( class B: public виртуальный A {... } ) на C ++, но не нашел ответа на свой вопрос.

Я знаю, что есть некоторые проблемы с виртуальным наследованием, но я хотел бы знать, в каких случаях виртуальное наследование будет считаться хороший дизайн.

Я видел, как люди упоминали такие интерфейсы, как IUnknown или ISerializable , а также, что дизайн iostream основан на виртуальном наследовании . Могут ли они быть хорошими примерами правильного использования виртуального наследования только потому, что нет лучшей альтернативы, или потому что виртуальное наследование является правильным дизайном в данном случае? Спасибо.

РЕДАКТИРОВАТЬ: Чтобы уточнить, я спрашиваю о реальных примерах, пожалуйста, не приводите абстрактные. Я знаю, что такое виртуальное наследование и какой шаблон наследования этого требует, я хочу знать, когда это хороший способ делать что-то, а не просто следствие сложного наследования.

EDIT2: Другими словами, я хочу знать, когда алмазная иерархия (что является причиной виртуального наследования) - хороший дизайн

26
задан Roman L 5 January 2011 в 16:52
поделиться