Шаблоны функций в языке С позволяют создать общее определение функции, применяемой для различных типов данных.
template <typename T> T Abs (T N)
{
return N < 0 ? -N : N;
}
Теперь, после поверхностного знакомства - мы рассмотрим все особенности работы шаблонов:
При определении шаблона используются два спецификатора: template и typename.
На место параметра типа Т можно подставить любое корректное имя.
В угловые скобки можно записывать больше одного параметра типа.
Параметр функции - это значение, передаваемое в функцию при выполнении программы.
Параметр типа - указывает тип аргумента, передаваемого в функцию, и обрабатывается только при компиляции.
Определение шаблона не вызывает генерацию кода компилятором самостоятельно. Последний создает код функции только в момент её вызова и генерирует при этом соответствующую версию функции.
Следующий вызов с теми же типами данных параметров не спровоцирует генерацию дополнительной копии функции, а вызовет ее уже существующую копию.
Компилятор создает новую версию функции, только если тип переданного параметра не совпадает ни с одним из предыдущих вызовов.