6 (972474), страница 2
Текст из файла (страница 2)
Это называется специализацией. Специализация перекрывает общий шаблон.Например, если для типа char нам нужен класс, отличный от генерируемого по общемушаблону, мы могли бы определить следующую специализацию (предваряется ключевымсловом template с пустыми фигурными скобками):template <>class C<char>{char var;public:C (char arg) : var(arg) {};char read() const {return var;}};56.1. Аргументы шаблона, не являющиеся типом.Модифицируем шаблон так, чтобы класс С<…> мог иметь элемент данных в виде массива сразмерностью, передаваемой объекту в виде параметра:template <typename T, int n>class C{T var;T arr[n];public:C (T arg) : var(arg+1) {};T read() const {return var;}};Объявление в программе объектаC<double, 10> ob(7.5);заставит компилятор определить класс C<double, 10>, передав ему double вместо T и 10вместо n.6.2.
Несколько параметров-типов и значения по умолчанию.Рассмотрим следующий шаблон класса:template <typename T1, typename T2 = int>class D{T1 var1;T2 var2;…};Объявление в программе объектаD<double, char> ob;заставит компилятор создать класс D<double, char> с использованием double вместо T1 иchar вместо T2.ОбъявлениеD<double> ob;приведет к подстановке вместо T2 его значения по умолчанию, т.е int.Шаблонные классы могут служить в качестве базовых при наследовании и включаться вдругие классы в качестве элементов данных.ЛитератураСтивен Прата. "Язык программирования Си++.
Лекции и упражнения. Учебник: Пер. С англ." - ОООДиаСофтЮП, 2004. Главы 13-14.6.