основанном
на
параметризации.
Данная
параметризация
осуществляется
при помощи
обобщенного
определения
этой
функции
шаблоном
(
template),
в
котором тип параметров определяют символическим идентификатором (например буквой).
Компилятор, проанализировав передаваемые в функцию аргументы, а именно
–
их
типы,
сгенерирует
код
нужной
функции,
заменив
символическое имя типа параметров на конкретный тип.
Формат
шаблона
функции:templateсписокпараметровшаблона декларация функции;
Набор параметризуемых типов определяется списком параметров шаблона. Каждый тип определяется ключевым словом
class и локальным в рамках
функции
идентификатором
типа.
Список
параметров
не
может
быть пустым, а его элементы разделяются запятыми.
Элемент
декларацияфункции –
обычное
определение (или
описание – прототип)
функции. В
списке
ее
параметров
необходимо
упомянуть
хотя
бы один раз типы параметров из списка шаблона.
Примеры
отношений
между
параметрами
шаблона
и
функции:
Шаблон может иметь единственный параметр: template
void
f1(T
par)
{код
функцииf1}
При
этом
символ
типа
Tможно
использовать
и
для
спецификации
возвращаемого значения, а также для любых других объектов в коде функции. Обязательный пункт
– использование
T в списке параметров функции выполнен.
Функция может иметь любые типы параметров
как параметризованные, так и стандартно декларированные.
Шаблон функции с частично параметризованными параметрами:
template
T>
void f2(T par, int x, int y) {
код функцииf2
}
Шаблон может иметь несколько параметризованных параметров с разными символическими идентификаторами:
template T2, class T1> void f3(T1 par1, T2 par2) {