ГЛАВА 8. ШАБЛОНЫ ТИПА Вот ваша цитата - Бьерн Страуструп В этой главе вводится понятие шаблона типа. С его помощью можно достаточно просто определить и
реализовать без потерь в эффективности выполнения программы и, не отказываясь от статического
контроля типов, такие контейнерные классы, как списки и ассоциативные массивы. Кроме того,
шаблоны типа позволяют определить сразу для целого семейства типов обобщенные (генерические)
функции, например, такие, как sort (сортировка). В качестве примера шаблона типов и его связи с
другими конструкциями языка приводится семейство списочных классов. Чтобы показать способы
получения программы из в значительной степени независимых частей, приводится несколько вариантов
шаблонной функции sort(). В конце определяется простой шаблон типа для ассоциативного массива и
показывается на двух небольших демонстрационных программах, как им пользоваться.
8.1 Введение Одним из самых полезных видов классов является контейнерный класс, т.е. такой класс, который
хранит объекты каких-то других типов. Списки, массивы, ассоциативные массивы и множества - все это
контейнерные классы. С помощью описанных в главах 5 и 7 средств можно определить класс, как
контейнер объектов единственного, известного типа. Например, в $$5.3.2 определяется множество
целых. Но контейнерные классы обладают тем интересным свойством, что тип содержащихся в них
объектов не имеет особого значения для создателя контейнера, но для пользователя конкретного
контейнера этот тип является существенным. Следовательно, тип содержащихся объектов должен
параметром контейнерного класса, и создатель такого класса будет определять его с помощью типа-
параметра. Для каждого конкретного контейнера (т.е. объекта контейнерного класса) пользователь
будет указывать каким должен быть тип содержащихся в нем объектов. Примером такого контейнерного
класса был шаблон типа Vector из $$1.4.3.
В этой главе исследуется простой шаблон типа stack (стек) и в результате вводится понятие
шаблонного класса. Затем рассматриваются более полные и правдоподобные примеры нескольких
родственных шаблонов типа для списка. Вводятся шаблонные функции и формулируются правила, что
может быть параметром таких функций. В конце приводится шаблон типа для ассоциативного массива.