Можно смело сказать, что основу 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. Это именно шаблон функции, а не шаблон класса.