Класс-шаблон может иметь несколько типов-шаблонов. Достаточно объявить все типы-шаблоны в виде списка, разделенного запятыми. Например, в следующем коротком примере создается класс, использующий два типа-шаблона:
/* данный пример использует два шаблона при определении класса
*/
#include <iostream.h>
template <class Type1, class Type2> class myclass
{
Type1 i;
Type2 j;
public:
myclass (Type1 a, Type2 b) { i = a; j = b; }
void show () { cout << i << ' ' << j << '\n'; }
};
int main()
{
myclass<int, double> ob1(10, 0.23);
myclass<char, char *> ob2('Х', "This is a test");
ob1.show(); // вывод int, double
ob2.show(); // вывод char, char *
return 0;
}
Эта программа выдаст следующий результат на экран:
10 0.23
X This is a test
В программе объявляются два типа объектов. Объект ob1 использует типы данных integer и double. Объект ob2 использует типы данных char и char*. В обоих случаях компилятор автоматически генерирует необходимые данные и функции в соответствии с типом данных, передаваемых конструктору в качестве аргументов.
Функции-шаблоны и классы-шаблоны обеспечивают беспрецедентные возможности для создания многократно используемого кода. Если процедура имеет общий характер, то стоит рассмотреть возможность ее реализации в виде шаблона. После того как этот шаблон будет отлажен и проверен, можно использовать его снова и снова в различных ситуациях, не внося никаких изменений. Однако не надо поддаваться искушению реализовывать все в виде функций-шаблонов и классов-шаблонов. Неуместное использование шаблонов может только запутать.