В крупномасштабных приложениях зачастую используют код от нескольких независимых производителей. Комбинирование нескольких библиотек от независимых разработчиков было бы необычайно трудной или вообще неразрешимой задачей, если бы все использованные в них имена располагались в одном пространстве имен. В библиотеках от независимых разработчиков почти неизбежно использовались бы совпадающие имена. В результате имя, определенное в одной библиотеке, вступило бы в конфликт с таким же именем из другой библиотеки. Чтобы избежать конфликтов имен, их следует определять в
Каждый раз, когда в этой книге использовалось имя из стандартной библиотеки, происходило обращение к пространству имен std
. В главе 18 продемонстрировано, как можно определять собственные пространства имен.
Глава 18 завершается очень важным, но нечасто используемым средством языка: множественным наследованием. Множественное наследование наиболее полезно в сложных иерархиях наследования.
Глава 19 посвящена ряду специализированных подходов и инструментальных средств решения ряда специфических проблем. В этой главе рассматриваются такие средства, как дополнительные возможности по распределению памяти; поддержка языком С++ идентификации типов времени выполнения (RTTI), позволяющей определять фактический тип выражения во время выполнения; а также способы определения и использования указателей на члены класса. Указатели на члены классов отличаются от указателей на обычные данные или функции. Обычные указатели различаются только на основании типа объекта или функции. Указатели на члены класса должны также отражать класс, которому принадлежит член. Затем рассматриваются три дополнительных составных типа: объединения, вложенные и локальные классы. Глава завершается кратким обзором средств, применение которых делает код непереносимым. Сюда относится спецификатор volatile
, битовые поля и директивы компоновки.
Глава 17
Специализированные средства библиотек
Последний стандарт существенно увеличил размер и область видимости библиотеки. Действительно, посвященная библиотеке часть стандарта более чем удвоилась по сравнению с прежним выпуском стандарта и составила почти две трети текста нового стандарта. В результате подробное рассмотрение каждого класса библиотеки С++ стало невозможным в данном издании. Однако четыре специализированных библиотечных средства являются достаточно общими, чтобы рассмотреть их в данной книге: это кортежи, наборы битов, генераторы случайных чисел и регулярные выражения. Кроме того, будут рассмотрены также некоторые дополнительные специальные средства библиотеки ввода и вывода.
17.1. Тип tuple
tuple
(кортеж) подобен шаблону pair
(пара) (см. раздел 11.2.3). У каждого экземпляра шаблона pair
могут быть члены разных типов, но их всегда только два. Члены экземпляров шаблона tuple
также могут иметь разные типы, но количество их может быть любым. Каждый конкретный экземпляр шаблона tuple
имеет фиксированное количество членов, но другой экземпляр типа может отличаться количеством членов.
Тип tuple
особенно полезен, когда необходимо объединить некие данные в единый объект, но нет желания определять структуру для их хранения. Список операций, поддерживаемых типом tuple
, приведен в табл. 17.1. Тип tuple
, наряду с сопутствующими ему типами и функциями, определен в заголовке tuple
.
Таблица 17.1. Операции с кортежами