пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

4 курс 2 семестр:
» Компьютерная графика и дизайн
» Анимация в Macromedia Flash
» Защита информации в компьютерных сетях
» Web-программирование
4 курс 1 семестр:
» Инструментальные средства разработки ПО
» Технология разработки ПО
» Документирование и сертификация
3 курс 2 семестр:
» Базы данных
» Инфокоммуникационные системы и сети
» Прикладное программирование
» Системное программирование
2 курс 2 семестр:
» Охрана труда
» Пакеты прикладных программ
» Основы программирования

38.Шаблоны функций. Определения шаблона функций. Конкретизация шаблона функций.


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

Но в данном случае важно, чтоб тип, который будет применяться вместо параметра T, поддерживал операцию сложения, которая возвращала бы объект этого же типа. Если вдруг используемый тип не будет применять операцию сложения, то на этапе компиляции мы столкнемся с ошибкой.

И при вызове функции add в нее можно передавать объекты и типа int, и типа double, и любого другого типа. При вызове функции компилятор на основании типа аргументов выведет конкретный тип, связанный с параметром шаблона T.

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

Аналогично вызов

double d = min( da );

конкретизирует экземпляр min(), в котором Type заменено на double, а size на 6:

В качестве формальных параметров шаблона функции используются параметр-тип и параметр-константа. Для определения фактического типа и значения константы, которые надо подставить в шаблон, исследуются фактические аргументы, переданные при вызове функции. В нашем примере для идентификации аргументов шаблона при конкретизации используются тип ia (массив из пяти int) и da (массив из шести double). Процесс определения типов и значений аргументов шаблона по известным фактическим аргументам функции называется выведением (deduction) аргументов шаблона. (В следующем разделе мы расскажем об этом подробнее. А в разделе 10.4 речь пойдет о возможности явного задания аргументов.)

Шаблон конкретизируется либо при вызове, либо при взятии адреса функции.


06.05.2018; 23:23
хиты: 78
рейтинг:0
Точные науки
информатика
Языки программирования
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь