Читайте также:
|
|
В примерах, демонстрирующих перегрузку ф-ий, нам приходилось нудно переписывать, по существу, одинаковый код для каждой функции с одним именем, но с разными сигнатурами. В С++, однако, имеется возможность автоматической генерации функций разного типа. Код, который это реализует для конкретной совокупности (семейства) функций, называется шаблоном функции. Шаблон семейства функций (function template) определяет потенциально неограниченное множество родственных функций. В отличие от механизма перегрузки, когда для каждой сигнатуры определяется своя ф-ия, шаблон функции определяется один раз, но это определение параметризуется. Параметризировать в шаблоне функций можно тип возвращаемого значения и типы любых параметров, количество и порядок размещения которых, должны быть фиксированы. Для параметризации используется список параметров шаблона.
Вообще, следует сказать, что шаблоны в С++ (как в применении к функциям, так и к классам), обеспечивают в языке, так называемый, параметрический полиморфизм. Параметрический полиморфизм позволяет использовать один и тот же код применительно к разным типам, причем тип является параметром кода. C++ есть нечто большее, чем просто язык объектно-ориентированного программирования. Полная сила C++ проявляется при программировании с применением шаблонов. Шаблоны положены в основу стандартной библиотеки: строки, потоки ввода/вывода, контейнеры, итераторы, алгоритмы и т.п.
Шаблон – это образ, форма, модель для создания классов или функций как экземпляров шаблона во время компиляции, подобно тому как класс является формой для создания объектов как экземпляров класса во время выполнения программы. Говоря философски, шаблон – это форма существовани “материи”, сотоящей из объектов и процессов, в которых они участвуют, инвариантная по отношению к типу объектов. Реализация этой формы осуществляется применеиием шаблона как абстрактного оператора к набору типов из универсального множества типов. В самом шаблоне эти типы рассматриваются как параметры. В применении к шаблонам функций речь можно вести о параметризации некоторого алгоритма на множестве типов. Тогда подставляя в шаблон те или иные параметры-аргументы, мы получаем семейство функций или классов с индивидуальными поведением и реализацией. Этот стиль программирования часто называется обобщенным (generic) программированием. Шаблоны могут также быть использованы для выбора кода на этапе компиляции, воздействия на поведение сгенерированного кода, и установку интерфейсов как межклассовых сервисов. Такой стиль программирования известен как метапрограммирование шаблонов.
Программирование с помощью шаблонов отличается от традиционного объектно-ориентированного программирования. Если ООП концентрируется на полиморфизме типов (требующего классов, объектов и виртуальных функций), то программирование на основе шаблонов сосредоточено вокруг параметрического полиморфизма, в котором функции или классы определяются независимо от своих параметров (которые могут быть значениями, типами или даже другими шаблонами).
Чтобы иметь конкретное представление о шаблонах, нам лучше рассмотреть несколько простых примеров. При определении шаблона функций используется ключевое слово языка template. Когда мы используем конкретную форму шаблона функции, нужная нам версия ф-ии автоматически генерируется для тех типов аргументов, которые мы подставляем вместо параметров шаблона. Продемонстрируем сказанное на примере обобщения все той же функцииmax().
Дата добавления: 2015-11-16; просмотров: 47 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Что такое перегрузка функций? | | | Использование шаблона функции |