Библиотека STL (Standart Template Library) - Шаблоны функций - основа STL

ОГЛАВЛЕНИЕ

Шаблоны функций - основа STL

Можно смело сказать, что основу STL составляют шаблоны. Именно они позволяют значительно сократить количество кода для программирования алгоритмов.

Давайте расмотрим задачу, смысл которой в одинаковых математических расчетах для разных типов. Представьте, что Вам нужно вычислять функцию:

(x*x)-(2*x)

Для типа int и double. Что делается классически ??? Пишутся две функции. Например так:

#include "stdafx.h"
#include "iostream.h"

int FuctInt(int x)
{
return (x*x)-(2*x);
}

double FuctDouble(double x)
{
return (x*x)-(2*x);
}

void main()
{
cout << "Int " << FuctInt(25) << endl;
cout << "Double " << FuctDouble(3.12) << endl;
}

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

#include "stdafx.h"
#include "iostream.h"


template
T fuct(T value)
{
return (value*value)-(2*value);
}


int FuctInt(int x)
{
return (x*x)-(2*x);
}

double FuctDouble(double x)
{
return (x*x)-(2*x);
}

void main()
{
cout << "Int " << FuctInt(25) << endl;
cout << "Double " << FuctDouble(3.12) << endl;
cout << "----------- template ---------------" << endl;
cout << "Int " << fuct(25) << endl;
cout << "Int " << fuct(3.12) << endl;

}

Шаблон начинается словом template, после описания фигурные скобки:

template < [список типов] [, [ список аргументов ]] >
{
реализация функции
return
}

Обратите внимание на return. Это именно шаблон функции, а не шаблон класса.