Шаблон функции определяет типонезависимую функцию. С помощью такого шаблона ваши программы в дальнейшем могут определить конкретные функции с требуемыми типами. Например, ниже определен шаблон для функции с именем mах, которая возвращает большее из двух значений:
template<class Т> Т mах(Т а, Т b)
{
if (а > b) return(а);
else return(b);
}
Буква T данном случае представляет собой общий тип шаблона. После определения шаблона внутри вашей программы вы объявляете прототипы функций для каждого требуемого вам типа. В случае шаблона mах следующие прототипы создают функции типа float и int.
float max(float, float);
int max(int, int);
Когда компилятор C++ встретит эти прототипы, то при построении функции он заменит тип шаблона T указанным вами типом. В случае с типом float функция mах после замены примет следующий вид:
template<class Т> Т max(Т а, Т b)
{
if (a > b) return(а) ;
else return(b);
}
float max(float a, float b)
{
if (a > b) return(a) ;
else return(b);
}
Следующая программа МАХ_ТЕМР.СРР
использует шаблон mах для создания функции типа int и float.
#include <iostream.h>
template<class T> Т mах(Т а, Т b)
{
if (a > b) return(a);
else return(b);
}
float max(float, float);
int max(int, int);
void main(void)
{
cout << "Максимум 100 и 200 равен " << max(100, 200) << endl;
cout << "Максимум 5.4321 и 1.2345 равен " << max(5.4321, 1.2345) << endl;
}
В процессе компиляции компилятор C++ автоматически создает операторы для построения одной функции, работающей с типом int, и второй функции, работающей с типом float. Поскольку компилятор C++ управляет операторами, соответствующими функциям, которые вы создаете с помощью шаблонов, он позволяет вам использовать одинаковые имена для функций, которые возвращают значения разных типов.