Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пиппец 2.doc
Скачиваний:
107
Добавлен:
07.06.2015
Размер:
3.16 Mб
Скачать

Синтаксис шаблона функции

template <<список аргументов шаблона>>

<тип возврата> <имя функции> (<список аргументов>)

<тело функции>

Например, описание шаблона функции, которая возвращает минимальное значение своих аргументов, может выглядеть так:

template <class Type>

Type min(Type a, Type b)

{

if (a < b) return a; else return b;

}

Теперь такая функция может использоваться для нахождения минимального из двух значений любого типа.

За ключевым словом template следуют один или несколько аргументов, заключенных в угловые скобки и отделенных друг от друга запятыми. Эти аргументы называются формальными аргументами шаблона (или формальными параметрами шаблона). Формальный параметр шаблона часто также называют формальным параметром типа (или формальным аргументом типа). Каждый аргумент состоит из ключевого слова class и идентификатора, обозначающего тип. Список аргументов шаблона не может быть пустым. За списком формальных параметров шаблона следует определение функции. Оно похоже на обычное определение функции, за исключением того, что один или несколько параметров используют типы, специфицированные в списке аргументов шаблона.

Имя формального параметра в списке параметров шаблона должно быть уникальным. Имя формального параметра шаблона можно повторно использовать при определении другого шаблона функции:

template <class Type>

Type max(Type a, Type b)

. . .

template <class Type>

Type min(Type a, Type b)

. . .

Каждому формальному параметру типа должно предшествовать служебное слово class. После своего описания формальный параметр типа становится спецификацией типа для всего тела шаблона. Он используется точно так же, как встроенные или определенные пользователем спецификации типа, например, для объявления переменной или операции приведения типа. Единственным ограничением на использование формальных параметров шаблона является необходимость появления каждого из них в списке формальных параметров функции хотя бы один раз. Естественно, нет ограничений ни на количество вхождений каждого параметра типа, ни на использование непараметризованных типов параметров функции.

Примеры определений шаблонов функций

Пример 1.

Функция принимает массив произвольного типа и возвращает значение его максимального элемента:

#define Tsize unsigned

template <class Type>

Type max(const Type* array, Tsize size)

{

Type max_val = array[0];

for(int i = 1; i < size; i++)

if (array[i] > max_val)

max_val = array[i];

return max_val;

}

В этом примере спецификация типа Type используется: для задания типа возвращаемого значения функции max(); для задания типа ее первого формального параметра array; для задания типа локальной переменной max_val. В ходе трансляции Type будет заменяться различными встроенными или определенными пользователем типами, конкретное значение которых получится при вызове функции max().

Внимание! Для нахождения максимального значения элементов массива определенного пользователем типа должна быть перегружена операция >.