Справочник по C/C++
Шаблоны

Ключевое слово template используется для создания обобщённых функций и классов. Тип данных, обрабатываемый обобщённой функцией или классом, задаётся как параметр. Следовательно, одно определение функции или класса можно использовать с несколькими типами данных.

Шаблоны функций

Общая форма определения шаблонной функции имеет следующий вид.

tetemplate тип> тип_возврата имя_функции (список_параметров)
{
	//тело функции
}

Здесь тип означает метку - заполнитель для типа данных, с которыми эта функция фактически будет иметь дело. В операторе template можно определить несколько параметров-типов данных, используя форму списка элементов, разделённых запятыми.

Рассмотрим пример.

template  void swap (X &a, X &b)
{
	X temp;
	temp = a;
	a = b;
	b = temp;
}
//вызов
int a, b;
float x, y;
swap (a, b);
swap (x, y);

При необходимости указания нескольких шаблонных типов, их можно перечислять через запятую, при это перед каждым именем, ставить слово class. Например.

Шаблоны классов

Общая форма определения шаблонного класса следующая.

template тип_данных> class имя_класса {
//...
};

Здесь тип_данных является меткой-заполнением для типа данных, с которым этот класс будет работать. При объявлении объекта обобщённого класса тип данных нужно задать в угловых скобках, используя следующую общую форму.

имя_класса<тип_данных> объект;

Рассмотрим пример.

template 
class My{
	T x;
public:
	void Set();
};

template 
int My :: Set(T mx)
{
	T = mx;
}

My c;	//объявление объекта
c.Set(12);

Ключевое слово export

Ключевое слово export может предварять объявление template. Оно позволяет другим файлам использовать шаблон, объявленый в другом файле путём задания лишь его объявления (вместо дублирования его полного объявления).

Ключевое слово typename

Язык C++ поддерживает ключевое слово typename, которое можно использовать вместо ключевого слова class в объявлении template или для обозначения неопределённого типа.