Почему библиотека библиотеки IO использует наследование? [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему библиотека библиотеки IO использует наследование? [закрыто]

Сообщение Anonymous »

Большая часть Стандартной библиотеки C++ использует шаблоны, а не наследование для реализации полиморфизма¹. Это одна из хорошо известных тем о том, почему². И на эту тему есть сотни видеороликов и сообщений в блогах.
Однако, что касается частей стандартной библиотеки, которые используют наследование, я могу только думать о
  • библиотека диагностики, в которой все исключения, сгенерированные стандартной библиотекой, наследуются от std::Exception,
  • и ввода/ выходная библиотека, содержащая дюжину классов, связанных между собой иерархией наследования, которая также имеет ромб.
Что касается диагностической библиотеки, я думаю, причина в том, что исключения могут проходить через несколько TU, и нужно иметь возможность их перехватывать, даже если неизвестен точный тип. И только динамический полиморфизм позволяет это.
Мой вопрос: каким особым требованиям/ограничениям/целям/чему-то должна удовлетворять библиотека ввода-вывода, что требуется (или требуется!³) для использования наследования?

(¹) Да, шаблоны реализуют статический полиморфизм и наследование динамический полиморфизм, но именно поэтому я задаю вопрос. В конце концов, алгоритмы стандартной библиотеки работают через шаблон именно потому, что все их определения доступны в заголовках. Если бы по какой-то причине требовалось, чтобы алгоритмы компилировались независимо, а затем связывались с клиентскими программами, тогда (насколько я понимаю) алгоритмы должны были бы использовать некоторый тип стирания типов, следовательно, некоторые тип полиморфизма времени выполнения.
(²) Да, вопрос относится к STL. Но я думаю, даже принимая двусмысленность, я думаю, что диспропорция между шаблонными и виртуальными частями библиотеки все еще сохраняется.
(³) Интересно, были бы эти две библиотеки разработаны по-разному, на основе Модули C++20.
(⁴) Уточнение: я не ищу ответов типа (со ссылкой на диагностическую библиотеку) "О, это довольно просто! Это потому что вы хотите, чтобы std::logic_error, std::runtime_error и другие исключения реализовывали то, что, поэтому вы можете вызвать .what для исключения, фактически не зная его конкретного типа !", потому что однопроходные алгоритмы также "хотят", чтобы их входные данные итераторов реализовывали операторы++ и оператор*, но они не требуют, чтобы все итераторы имели общий базовый класс! р>

Подробнее здесь: https://stackoverflow.com/questions/791 ... nheritance
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»