Основные принципы и понятия при работе с шаблоном.
Теперь, после поверхностного знакомства - мы рассмотрим все особенности работы шаблонов: 1. При определении шаблона используются два спецификатора: template и typename. 2. На место параметра типа Т можно подставить любое корректное имя. 3. В угловые скобки можно записывать больше одного параметра типа. 4. Параметр функции - это значение, передаваемое в функцию при выполнении программы. 5. Параметр типа - указывает тип аргумента, передаваемого в функцию, и обрабатывается только при компиляции. Процесс компиляции шаблона. 1. Определение шаблона не вызывает генерацию кода компилятором самостоятельно. Последний создает код функции только в момент её вызова и генерирует при этом соответствующую версию функции. 2. Следующий вызов с теми же типами данных параметров не спровоцирует генерацию дополнительной копии функции, а вызовет ее уже существующую копию. 3. Компилятор создает новую версию функции, только если тип переданного параметра не совпадает ни с одним из предыдущих вызовов. Пример работы с шаблоном.
1. Шаблон генерирует множество функций, возвращающих большее из двух значений с одинаковым типом данных. 2. Оба параметра определены как параметры типа T и при вызове функции передаваемые переметры должны быть строго одного типа. В данном случае возможны такие вызовы функции:
А такой вызов приведет к ошибке:
Компилятор не сможет преобразовать параметр int в double. Решением проблемы передачи разных параметров является такой шаблон:
В этом случае Т1 обозначает тип значения, передаваемого в качестве первого параметра, а Т2 - второго. ВНИМАНИЕ!!! Каждый параметр типа, встречающийся внутри угловых скобок, должен ОБЯЗАТЕЛЬНО появляться в списке параметров функции. В противном случае произойдет ошибка на этапе компиляции.(Естественно, только в том случае, если функция будет вызвана.)
Переопределение шаблонов функций 1. Каждая версия функции, генерируемая с помощью шаблона, содержит один и тот же фрагмент кода. 2. Однако, для отдельных параметров типа можно обеспечить особую реализацию кода, т. е. определить обычную функцию с тем же именем, что и шаблон. 3. Обычная функция переопределит шаблон. Если компилятор находит типы переданных параметров соответствующие спецификации обычной функции, то он вызовает ее, и не создает функцию по шаблону. На сегодня всё!!! Желаем удачи.
Домашнее задание
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|