Шаблоны функций в С++ для начинающих Первое знакомство

  Шаблоны в C++ для начинающих очень часто непонятны и представляют темный лес. В некоторых книгах описано очень мудрено, где-то описано попроще. Попытаемся понять что такое шаблоны функций.

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

  • Ключевое слово template обозначает Шаблон.
  • template <class T> обозначает Шаблон функции с одним параметром T

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

  После Написания template и указания в угловых скобках всех параметров (В приведенном примере один параметр T) в примере написана функция MyFunc. Вместо явного указания типа, тип для функции и тип для параметра этой функции был указан как тип по Шаблону. Для такого указания типа используются имена параметров, указанных в угловых скобках Шаблона.
Проще говоря — этот описанный T можно изменить на привычный вам тип (int, double или другой)

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

  Дальше проще. Функция MyFunc возвращает некоторое значение. Для того, чтоб было максимально просто понять материал,- что функция принимает, то и возвращает, используется только один параметр. Так как функция возвращает один параметр, то и в шаблоне для этой функции должен быть указан один параметр. (как я писал ранее — очень похоже на прототипы функций). Если в шаблоне указан один параметр — то и внутри функции по этому шаблону нужен один, если два — то два и т.д.

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

  Увы, лучше я написать не могу. И код понять намного проще чем читать подробное описание.

  Небольшой, стандартный пример на сравнение двух чисел и вывод большего из них
Код C++ Шаблоны функций Сравнить два числа и вернуть большее значение

  Небольшой код, в функцию max передается два параметра, тип которых при приеме внутри функции определяется шаблоном. В самом шаблоне определяемый тип указан как один параметр. В коде указан момент, который может привести к ошибке. Просто если в самом Шаблоне указан один параметр, то такая запись интерпретируется компилятором как «Сколько бы функция не принимала параметров вовнутрь себя, возложив на меня обязанности указания типов, все эти параметры я расценю как однотипные» и, соответственно работайте с ними как с однотипными и не выпендривайтесь.

  На любом экзамене подобный ответ скорее всего двойка, но зато хорошо помогает понять некоторые принципы.

  Если нужно, чтоб Шаблон обрабатывал параметры как параметры с разными типами, значит нужно внутри Шаблона прописать более двух параметров. Это делается через запятую
Код C++ Шаблоны функций Сравнить два значения и вернуть максимальное

  В этом коде у невнимательного читателя может возникнуть вопрос: «А почему функция возвращает не 55.5555, а 55» — Ответ прост. Шаблоны функций очень похожи на прототипы функций. В качестве первого параметра вовнутрь функции передается целочисленное значение 10. Эта 10 обрабатывается компилятором с помощью шаблона. В Шаблоне для типа первого параметра функции определен параметр Т1 (Он первый внутри угловых скобок). В добавок к этому сама функция max имеет тип, равный типу Т1, поэтому функция возвращает тот тип, который компилятор определяет из первого входного параметра вовнутрь функции.
Изъясняясь короче

—> Из функции main вызывается функция max. В функцию передается 2 параметра
—> Функция max принимает два переданных в нее параметра
—> В Функции max для обработки данных происходит некоторый анализ при помощи шаблона
—> В шаблоне указано, что функция имеет два различных параметра, компилятор говорит понял, разберусь
—> Компилятор обработал данные с помощью шаблона и выбрал подходящий тип для каждого из параметров
—> Код написан таким образом, что тип функции max равен типу первого принимаемого параметра

  Ко всему этому написанному материалу можно добавить, что можно использовать различного рода локальные переменные, тип которых будет определяться компилятором при помощи Шаблона. (по аналогии с примером типа функции)
Код С++ Шаблоны функций

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

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

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

  Есть вещи, которые я мог не так разъяснить. Я не эксперт и могу путать, поэтому доверяйте только надежным источникам информации и проверенным временем авторам книг. При всем этом я старался дать этот материал максимально просто для восприятия

смотрите также Шаблоны классов

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

7 комментариев: Шаблоны функций в С++ для начинающих Первое знакомство

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     

Случайная книга в электронном формате

Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Народная примета: если программист в 9.00 утра на работе, значит, он там ночевал...

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок