Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:
A.12.6. Объединения
Объединение (union) — это класс, в котором все члены расположены в одной и той же области памяти. В каждый момент времени объединение может содержать только один элемент, причем считывается только тот элемент объединения, который был записан последним. Рассмотрим пример.
Правила согласованного чтения и записи членов объединения компилятором не проверяются. Мы вас предупредили.
A.13. Шаблоны
Шаблон (template) — это класс или функция, параметризованные набором типов и/или целыми числами.
В списке шаблонных аргументов ключевое слово
Целочисленные шаблонные аргументы должны быть константными выражениями.
A.13.1. Шаблонные аргументы
Аргументы шаблонного класса указываются каждый раз, когда используется его имя.
Аргументы шаблонной функции обычно выводятся из ее аргументов.
Можно объявить шаблонную функцию, для которой невозможно вывести ее шаблонные аргументы. В этом случае мы должны конкретизировать шаблонные аргументы явно (точно так же, как для шаблонных классов). Рассмотрим пример.
Этот код работает, только если объект класса
A.13.2. Конкретизация шаблонов
Вариант шаблона для конкретного набора шаблонных аргументов называется специализацией (specialization). Процесс генерации специализаций на основе шаблона и набора аргументов называется конкретизацией шаблона (template instantiation). Как правило, эту задачу решает компилятор, но программист также может самостоятельно определить отдельную специализацию. Обычно это делается, когда общий шаблон для конкретного набора аргументов неприемлем. Рассмотрим пример.
Аналогом специализации для функций является перегрузка.