C++.Бархатный путь




Шаблоны функций и шаблонные функции - часть 3


template <class Type> Type min (Type a, Type b); /* Прототип шаблона функции. Ключевое слово template обозначает начало списка параметров шаблона. Этот список содержит единственный идентификатор Type. Сама функция содержит два объявления шаблонных параметра, специфицированных шаблоном параметра Type. Спецификация возвращаемого значения также представлена шаблоном параметра Type. */ int main (void) { min(10,20);// int min (int, int); min(10.0,20.0);// float min (float, float); /* Вызовы шаблонной функции. Тип значений параметров определён. На основе выражения вызова (транслятор должен распознать тип параметров) и определения шаблона транслятор самостоятельно строит различные определения шаблонных функций. И только после этого обеспечивает передачу управления новорождённой шаблонной функции. */ return 1; } template <class Type> Type min (Type a, Type b) { return a < b ? a : b; } /* По аналогии с определением функции, эту конструкцию будем называть определением шаблона функции. */

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

В результате конкретизации шаблона функции min() транслятор строится следующий вариант программы с двумя шаблонными функциями. По выражению вызова на основе шаблона строится шаблонная функция. Почувствуйте прелесть употребления однокоренных слов! Шаблон функции и шаблонная функция - два разных понятия.

int min (int a, int b); float min (float a, float b); int main (void) { min(10,20); min(10.0,20.0); return 1; } int min (int a, int b) { return a < b ? a : b; } float min (float a, float b) { return a < b ? a : b; }

Построение шаблонной функции осуществляется на основе выражений вызова. При этом в качестве значений параметров в выражении вызова могут быть использованы значения любых типов, для которых определены используемые в теле функции операции. Так, для функции min() тип параметров зависит от области определения операции сравнения <.

Типы формального параметра шаблона и значения параметра выражения вызова сопоставляются без учёта каких-либо модификаторов типа. Например, если параметр шаблона в определении функции объявлен как




Содержание  Назад  Вперед