11 шаблоны
.pdf11 – 1
6. ШАБЛОНЫ
Родовая функция
(generic function)
Родовой класс
(generic class)
11 – 2
6.1. Родовые функции
Определение шаблона функции:
template <class T>
тип_возвращаемого_значения имя_функции(список_параметров)
{
// тело функции
}
class/typename
11 – 3
Пример:
template <class T>
void swap(T &a, T &b)
{
T t; t = a; a = b; b = t;
}
11 – 4
int main()
{
int i = 10, j = 20; float x = 10.1, y = 20.2;
cout << ”До обмена”
<<endl << ”i, j: ” << i << ’ ’ << j
<<endl << ”x, y: ” << x << ’ ’ << y
<<endl;
swap(i, j); swap(x, y);
//обмен целых чисел
//обмен вещ-ных чисел
11 – 5
cout << ”После обмена”
<<endl << ”i, j: ” << i << ’ ’ << j
<<endl << ”x, y: ” << x << ’ ’ << y
<<endl;
return 0;
}
11 – 6
До обмена i, j: 10 20
x, y: 10.1 20.2
После обмена i, j: 20 10
x, y: 20.2 10.1
11 – 7
Пример:
template <class T1, class T2> void func(T1 x, T2 y)
{
cout << x << ’ ’ << y << endl;
}
11 – 8
int main()
{
func(10, ”hi”); func(0.2, 0x10000); return 0;
}
10 hi
0.2 65536
11 – 9
6.2. Родовые классы (РК)
Определение РК, т.е. определение шаблона класса:
template <class T> class имя_класса {
// тело определения класса
};
Создание объекта РК:
имя_класса <тип_данных> имя_объекта;
11 – 10
Библиотека стандартных шаблонов
Standard Template Library
STL