Наряду с общим шаблоном часто бывает необходима некоторая специализированная версия того же шаблона. Поэтому изначально в шаблонах был реализован механизм специализации (см. п. 14.7 в [1]). Специализация заключается в том, что на основе исходного первичного шаблона реализуется его специализированная версия для некоторых конкретных значений параметров. Специализация шаблона называется полной, если конкретизированы все параметры первичного шаблона. Если определена только часть параметров, то специализация называется частичной (см. п. п. 14.5.4 в [1]). Специализация шаблона — это не присвоение параметров по умолчанию. Шаблон с параметрами по умолчанию является первичным шаблоном, который тоже можно специализировать. Специализация шаблона — это «перегрузка» для классов. Специализация шаблона — это не инстанцирование. Инстанцирование выполняет компилятор при трансляции программы, когда встречает объявление объекта с конкретными значениями параметров шаблона. Специализацию первичного шаблона реализует программист как отдельный класс-шаблон, в котором некоторые параметры первичного шаблона имеют известные значения.
Специализация применяется чаще всего для параметров-типов. Первичный шаблон определяет общий вариант, а специализированная версия — частный случай для конкретных типов. Полная специализация представляет собой конкретный класс, реализованный для конкретных значений параметров первичного шаблона.
Обычно в специализированных версиях переопределяются отдельные (или даже все) методы, которые для заданного конкретного типа должны работать не так, как в общем случае. Например, пусть в первичном шаблоне определена операция присваивания operator=f Для символьных массивов эта операция обычно работает совершенно не так, как для всех остальных типов. Тогда нам нужно определить специализированную версию первичного шаблона для const char[] и переопределить в ней операцию присваивания. При определении шаблона и его специализированных версий должен соблюдаться порядок следования: сначала должен быть определен первичный шаблон, и только после него разрешается определять специализированные версии (листинг 11.5).
Опубликовал Kest
December 15 2013 19:47:00 ·
0 Комментариев ·
3733 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.