Шаблонные функции


Шаблоны функций описывают общие свойства функций и обычно объявляются в заголовочном файле, например:

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.

Загрузка...