Здравствуйте, opener, Вы писали:
O>Про устранение проблемы с ромбовидным наследованием знаю, однако сегодня, ковыряя файл стандартной библиотеки <ostream> натолкнулся на такое:
O>
O>template<class _Elem,
O> class _Traits>
O> class basic_ostream
O> : virtual public basic_ios<_Elem, _Traits>
O>
O>Ну и на кой здесь виртуальное наследование от basic_ios?
А, наверно догнал — все то же устранение проблемы с ромбовидным наследованием:
Если iostream наследуется от ostream и istream, то...
O>template<class _Elem,
O> class _Traits>
O> class basic_ostream
O> : virtual public basic_ios<_Elem, _Traits>
O>
O>Ну и на кой здесь виртуальное наследование от basic_ios?
Ни на кой. Исключительно ради совместимости с первыми версиями
Стандартную библиотеку С++ проектировали давно, опыта у всех мало было, вот и родили урода.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, igna, Вы писали:
I>Все-таки не всё в стандартной библиотеке уродливо, STL например нет. А ввод-вывод да, уродлив, причем более уродливого я не знаю вообще ничего.
К STL у меня очень сложное отношение. Ну да тут ужо был мегафлей на эту тему
Но STL -- это позднее дополнение, а отличии от потоков, сделанных давным-давно...
И они да, уродливы вообще везде.
Чего их не сдадут в утиль наконец я не понимаю, хоть ты тресни
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, B0FEE664, Вы писали:
BFE>Это в каком смысле? В смысле реализации/архитектуры или само понятие потоков чем-то плохо?
Ну я бы, для начала напомнил, что перегрузка операторов каким-нибудь необычным способом -- это плохая практика. Ну да для операторов побитового сдвига потоков уже поздно что-то менять.
А вот иерархия потоков, то, каким местом туда прикручены локейлы и перекодировки, то, что имя обязано быть строкой байт и т. д. -- это всё, мягко говоря, неудобно. Про реализации вообще и говорить нечего. Это просто мегажуть. Простую, по идее, проблему решают мега сложным способом...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, opener, Вы писали:
O>Про устранение проблемы с ромбовидным наследованием знаю, однако сегодня, ковыряя файл стандартной библиотеки <ostream> натолкнулся на такое:
Вообще, виртуальное наследование это и есть true-OOP наследование выражающее отношение is-a. Тип ведь не может быть дважды под-типом другого типа "Проблемы" с ромбовидным наследованием, как раз и получаются из-за того, что обычное наследование, хотя и является более эффективным механизмом, неточно выражает это отношение между типами.
Здравствуйте, k.o., Вы писали:
KO>Вообще, виртуальное наследование это и есть true-OOP наследование выражающее отношение is-a. Тип ведь не может быть дважды под-типом другого типа "Проблемы" с ромбовидным наследованием, как раз и получаются из-за того, что обычное наследование, хотя и является более эффективным механизмом, неточно выражает это отношение между типами.
Да. Мне нравится такой пример, например.
Рассмотрим иерархию:
class человек;
class женщина : человек;
class военнослужащий : человек
class женщина военнослужащий : женщина, военнослужащий;
Так вот, женщина военнослужащий нифига не "дважды человек"
Но я этот пример уже где-то тут приводил
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, k.o., Вы писали:
KO>>Вообще, виртуальное наследование это и есть true-OOP наследование выражающее отношение is-a. Тип ведь не может быть дважды под-типом другого типа "Проблемы" с ромбовидным наследованием, как раз и получаются из-за того, что обычное наследование, хотя и является более эффективным механизмом, неточно выражает это отношение между типами.
E>Да. Мне нравится такой пример, например. E>Рассмотрим иерархию: