Страница 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. Это именно шаблон функции, а не шаблон класса. |