В Стандартной библиотеке C++ для реализации полиморфизма в основном используются шаблоны вместо наследования. (Некоторые причины см. в этой теме.) Однако есть некоторые части стандартной библиотеки, которые используют наследование, например
библиотека диагностики, где все исключения, генерируемые стандартной библиотекой, наследуются от std::Exception,
и библиотеки ввода/вывода, которая содержит дюжину классов, связанных между собой иерархией наследования, которая также имеет алмаз.
Почему лишь несколько компонентов, подобных приведенным выше, были разработаны с использованием наследования, а не шаблонов?
В Стандартной библиотеке C++ для реализации полиморфизма в основном используются шаблоны вместо наследования. (Некоторые причины см. в этой теме.) Однако есть некоторые части стандартной библиотеки, которые используют наследование, например [list] [*]библиотека диагностики, где все исключения, генерируемые стандартной библиотекой, наследуются от std::Exception, [*]и библиотеки ввода/вывода, которая содержит дюжину классов, связанных между собой иерархией наследования, которая также имеет алмаз. [/list] Почему лишь несколько компонентов, подобных приведенным выше, были разработаны с использованием наследования, а не шаблонов?