632_____________________________________________Глава •

Все определения шаблонов функций начинаются с ключевого слова templafa
за которым следует список формальных типов параметров функции, заключении
в угловые скобки (< и >). Каждый формальный тип параметра предваряется кл|
чевым словом class. Формальные типы параметров — это встроенные типы ил
типы, определяемые пользователем. Они используются для задания типов арг;

ментов функции, для задания типов возвращаемого значения функции и для oft
явления переменных внутри тела описания функции. После шаблона следу!
обычное описание функции.

Приведем пример шаблона функции, возвращающей минимальный из тр<
передаваемых в нее параметров любого (но одинакового) типа:

template <class T>

Т min(T xl, Т х2, Т хЗ)

{

Т Imin = xl;

if (x2 < Imin)                                                    ;

Imin = x2;

if (хЗ < Imin)

Imin = хЗ;

return Imin;                                                      -,
1

В заголовке шаблона этой функции объявляет единственный формальный п
раметр Т как тип данных, который должен проверяться функцией min. В следу!
щем далее заголовке функции этот параметр Т использован для задания типа во
вращаемого значения (Т min) и для задания типов всех трех параметров xl — Х
В теле функции этот же параметр Т использован для указания типа локальной п
ременной Imin.

Объявленный таким образом шаблон можно использовать, например, следу]
щим образом:

int il = 1, i2 = 3, i3 = 2;

double rl = 2.5, r2 = 1.7, r3 = 3.4;

AnsiString si = "строка I", s2 = "строка 2", s3 = "строка 3";       i
Labell->Caption = min(il,i2,i3);

Label2->Caption = min(rl,r2,r3);

Label3->Caption = min(s3, s2, si);

Когда компилятор обнаруживает вызов min в исходном коде программы, эп
тип данных, переданных в min, подставляется всюду вместо Т в определении ша
лона и Си++ создает законченную функцию для определения максимального i
трех значений указанного типа данных. Затем эта созданная функция компилир
ется. Таким образом, шаблоны играют роль средств генерации кода.

Например, при вызове функции с тремя целыми параметрами компилят»
сгенерирует функцию:

int minfint xl, int x2, int хЗ)
(

int Imin = xl;

if (x2 < Imin)

Imin = x2;

if (хЗ < Imia)

Imin = хЗ;

return Imin;

)

Приведенный шаблон будет работать для любых предопределенных или BI
денных пользователем типов, для которых определена операция отношения <•