В Стандартной библиотеке C++ для реализации полиморфизма в основном используются шаблоны вместо наследования. (Некоторые причины см. в этой теме.) Однако есть некоторые части стандартной библиотеки, которые используют наследование, например
- библиотека диагностики, где все исключения, генерируемые стандартной библиотекой, наследуются от std::Exception,
- и библиотеки ввода/вывода, которая содержит дюжину классов, связанных между собой иерархией наследования, которая также имеет алмаз.
Почему лишь несколько компонентов, подобных приведенным выше, были разработаны с использованием наследования, а не шаблонов?
Подробнее здесь:
https://stackoverflow.com/questions/791 ... of-templat