Глава 19. Классы-шаблоны 515
Средство |
Условие использования |
Аргументы по умолчанию Перегрузка функций Шаблоны Полиморфизм |
Аргументы имеют предпочтительные значения Функции семантически подобны (например, печать), но отличаются типы данных Свойство достаточно гибкое и может пригодиться в случаях, когда отличаются либо типы данных, либо реализации, либо и то и другое одновременно В главе 20 вы увидите, как эта сторона C++ обеспечивает гибкость при работе с типами данных во время выполнения программ |
Родовые функции
Шаблонами могут быть как функции, так и классы. Сейчас мы сосредоточимся на синтаксисе и реализации родовых функций. Параметризованный тип может быть как классом, так и встроенным типом данных. Синтаксис функций-шаблонов подобен обычной функции, за исключением префикса шаблона и использования параметризованных аргументов.
Начнем с примера определения функции, обменивающей значениями два аргумента (такая функция часто используется в алгоритмах сортировки данных). Поскольку функция невелика, мы используем спецификатор inline. Для пробы начнем с функции, переставляющей два целых числа.
inline void Swap( int& a, int& b) ( int t = a; a = b; b = t; }
Заметим, что функция принимает значения по ссылке. Это означает, что функция обменивает значения реальных аргументов, а не их копий (см. главу 17). Как видите, реализация функции перестановки достаточно проста.
Теперь выделим те данные, которые являются для функции основными, и сделаем их параметризованными аргументами. В нашем случае — это целые, передаваемые по ссылке. Синтаксис функции шаблона выглядит так:
template <class T> [спецификатор] возвращаемый_тип имя функции ([список аргументов]);
тогда наша функцид, примет вид, , ^ , , , '
template <class T> inline void Swap ( T& a, TS Ь) ( Т t = а; а = b; b = t; } '
Тип параметра располагается в угловых скобках о после ключевого слова template (этот оператор по традиции помещается в строке, предшествующей