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

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

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

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

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

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

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

template <class X> 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. Например.

<class X, class Y>

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

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

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

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

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

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

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

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

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

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

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

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

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



Реклама