Библиотека STL (Standart Template Library) - Шаблоны функций - основа STL
ОГЛАВЛЕНИЕ
Страница 3 из 12
Шаблоны функций - основа 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. Это именно шаблон функции, а не шаблон класса.