576 Часть lit. Современное программирование на C++

объявлению функции, но это не обязательно). Для завершения определения функции-шаблона Swap заменим все вхождения типа int (вместо которого должен фигурировать тип параметра) на параметрическое имя т. Имя т (от слова Template — шаблон) используется, опять-таки, по соглашению, для удобства; вполне допустимо любое другое имя.

Шаблоны наиболее удобны в тех случаях, когда отдельные реализации, как в нашем примере, отличаются друг от друга только типами данных.

Объявление экземпляра функции-шаблона

Экземпляр функции-шаблона можно объявлять как явно, так и неявно. Неявно объявленная функция-шаблон будет вызываться подобно любой другой функции. Типы параметров компилятор определит по типам аргументов. То есть для нашей функции Swap объявление

char* msgl = "Coothchie Cootchie Coo";

char* msg2 = "Look out we're going to crash!" ;

Swap ( msgl, msg2);

приведет к вызову функции-шаблона с типом параметра char*. К тем же результатам приведет и явное объявление типа параметра:

Swap<char*>( msgl, msg2);

Листинг 19.1 дает возможность поэкспериментировать с простыми функциями-шаблонами. Наша функция относительно невелика, но чем больше и сложнее задача, тем ощутимее будет экономия.

h05161.jpg

// SWAP.CPP- Демонстрация функции-шаблона Swap.

#include <iostream.h>

template <class T>

inline void Swap( T& a, T& b)

( Т t = a; a = Ь; Ь = t; }

void mainO

{

char* msgl = "Cootchie Cootchie Coo";

char* msg2 = "Look out we're going to crash!";

// Неявное объявление функции-шаблона

Swap( msgl, msg2);

cout « "msgl: " « msgl « endl;

cout « "msg2: " « msg2 « endl;

int с = 5, d = 6;

// Явное объявление функции-шаблона

Swap<int>( с, d);

cout « "с: " « с « " d: " « d « endl;