C++ Программирование в среде С++ Builder 5

         

Шаблоны функций


Синтаксис определения шаблона функции имеет вид:

template <список формальных типов>возвращаемый_тип имя_функции(список параметров) {

тело функции }

Список_формальных_типов состоит из спецификаций вида class формалъный_тип, разделенных запятыми. Формальный тип может обозначаться любым идентификатором, аналогично формальному параметру функции.

Список _параметров функции должен включать в себя параметры типов, перечисленных в списке формальных _типов, и еще, возможно, какие-то другие. Возвращаемый_тип также может быть одним из формальных типов. Например:

template <class T> void Func1 (Та, Т b) { ... }

template <class T> T Func2(Т a, int b) { ... }

template <class Tl, class T2> long Func3(Tl a, T2 b) { ... }

Как видите, определение шаблона функции отличается от обычной функции только наличием конструкции template <список_формальных_типов> в заголовке.

В качестве примера шаблонов функций можно привести определение функций min () и max () из заголовочного файла sdlib.h. Определение это сводится к следующему:

template <class T> inline const Т &min(const Т&t1, const T&t2)

if (t1 < t2)

return tl;



else

return t2;

}

template <class T>

inline const T &max(const T &tl, const T &t2)

{

if (t1 > t2) return t1;

else

return t2;

}

Эти функции можно вызывать с аргументами любого типа (класса), в котором определены операции “больше-меньше”.

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

Шаблоны функций размещают чаще всего в заголовочных файлах, подобно определениям макросов и inline-функций.



Содержание раздела