Шаблоны функций описывают общие свойства функций и обычно объявляются в заголовочном файле, например:
template<classT> void f(T param)
{ // Тело функции }
Шаблон начинается строкой template<class T>, указывающей компилятору, что Т — определяемое пользователем имя функции. Слова class не обязательно и означает класс С++. Необходим, хотя бы один параметр Т в скобках для передачи функции данных для обработки. Можно задать также значение (T param), указатель (T* param) или ссылку (T& param). Шаблон может объявлять несколько параметров этих типов и возвращать значение типа Т, например:
template<class T> T f(int a, T b) //тип T будет определяться позже
{ // Тело функции }
Прототип функции будет выглядеть следующим образом:
double f(int a, double b);
Если бы функция была обычной, то необходима была бы ее реализация. Но поскольку она шаблонная, то компилятор сам реализует код функции, заменив Т в данном случае на double.
//Программа 1
#ifndef _MINMAX
#define _MINMAX
template<class T> T max(T a, T b)
{
if( a>b )
return a;
else
return b;
}
template<class T> T min(T a, T b)
{
if( a<b )
return a;
else
return b;
}
#endif
Эти шаблонные функции можно использовать для любых типов данных.
#include <iostream.h>
#include <conio.h>
#include "minmax.h"
int max (int a, int b);
double max (double a, double b);
char max (char a, char b);
void main()
{
clrscr();
int i1 = 100, i2 = 200;
double d1 = 3.14, d2 = 9.87;
char c1 = ‘A’, c2 = ‘z’;
cout << "100, 200 \n";
cout << "max(i1, i2) == " << max(i1, i2) << endl;
cout << "3.14, 9.87 \n";
cout << "max(d1, d2) == " << max(d1, d2) << endl;
cout << c1 << c2 << "\n";
cout << "max(c1, c2) == " << max(c1, c2) << endl;
}
В программе объявлены три прототипа. Поскольку прог-рамма не содержит их реализаций, то компилятор ищет их шаблон, совпадающий по типу возвращаемого значения и ее па-раметров. Найдя такой шаблон, он реализуют три перегру-женные функции max.
