WikiDer > Технический отчет C ++ 1
Технический отчет C ++ 1 (TR1) - общее название для ISO / IEC TR 19768, Расширения библиотеки C ++, который представляет собой документ, предлагающий дополнения к Стандартная библиотека C ++ для С ++ 03 языковой стандарт. Дополнения включают обычные выражения, умные указатели, хеш-таблицы, и генераторы случайных чисел. TR1 сам по себе не был стандартом, а скорее проектным документом. Однако большинство его предложений стало частью более позднего официального стандарта, C ++ 11. До стандартизации C ++ 11 поставщики использовали этот документ в качестве руководства для создания расширений. Целью отчета было «создать более широко распространенную существующую практику для расширенной стандартной библиотеки C ++».
Отчет был впервые распространен в виде проекта в 2005 г. Проект технического отчета о расширениях библиотеки C ++, затем опубликованный в 2007 году как стандарт ISO / IEC как ISO / IEC TR 19768: 2007.
Обзор
Компиляторы не нужно было включать компоненты TR1, чтобы соответствовать стандарту C ++, потому что предложения TR1 не были частью самого стандарта, а были только набором возможных дополнений, которые еще должны были быть ратифицированы. Однако большая часть TR1 была доступна из Способствовать росту, и несколько распространителей компиляторов / библиотек реализовали все или некоторые компоненты. TR1 - это далеко не полный список дополнений к библиотеке, появившихся в C ++ 11. Например, C ++ 11 включает библиотеку поддержки потоков, которая недоступна в TR1.
Новые компоненты были определены в std :: tr1
пространство имен чтобы отличить их от тогдашней стандартной библиотеки.
Составные части
TR1 включает в себя следующие компоненты:
Общие коммунальные услуги
Справочная оболочка - позволяет пройти Рекомендации, а не копирует в алгоритмы или функциональные объекты. Эта функция была основана на Boost.Ref.[1] А обертка ссылка получается из экземпляра класса шаблона reference_wrapper
. Ссылки-оболочки аналогичны обычным ссылкам («&») языка C ++. Чтобы получить ссылку на оболочку из любого объекта, шаблонный класс ссылка
используется (для постоянной ссылки Cref
используется).
Ссылки на оболочки полезны прежде всего для шаблонных функций, когда вывод аргументов не приводит к ссылке (например, при пересылке аргументов):
#включают <iostream>#включают <tr1/functional>пустота ж( int &р ) { ++р; }шаблон< учебный класс Funct, учебный класс Arg >пустота грамм( Funct ж, Arg т ){ ж(т);}int главный(){ int я = 0; грамм( ж, я ); // 'g ' создается стандартное::cout << я << " п"; // Вывод: 0 грамм( ж, стандартное::tr1::ссылка(я) ); // инстанс 'g >' стандартное::cout << я << " п"; // Вывод: 1}
Умные указатели - добавляет несколько классов, упрощающих управление временем жизни объекта в сложных случаях. Добавлены три основных класса:
shared_ptr
- умный указатель с подсчетом ссылокweak_ptr
- вариантshared_ptr
это не увеличивает количество ссылок
Предложение основано на библиотеке Boost Smart Pointer.[2]
Функциональные объекты
Эти четыре модуля добавлены к <functional>
заголовочный файл:
Обертка полиморфной функции (функция
) - может хранить любую вызываемую функцию (указатели функций, указатели функций-членов и объекты функций), которая использует указанную сигнатуру вызова функции. Тип не зависит от типа используемого вызываемого объекта. На основе Boost.Function[3]
Связывания функциональных объектов (связывать
) - может привязать любой параметр параметры для функционирования объектов. Допускается также функциональная композиция. Это обобщенная версия стандарта std :: bind1st
и std :: bind2nd
связать функции. Эта функция основана на библиотеке Boost Bind.[4]
Типы возвращаемых функций (Результат
) - определяет тип выражения вызова.
Функции-члены (mem_fn
) - расширение до стандарта std :: mem_fun
и std :: mem_fun_ref
. Позволяет указатели члену функции рассматриваться как функциональные объекты. На основе библиотеки Boost Mem Fn.[5]
Метапрограммирование и типовые черты
Есть сейчас <type_traits>
файл заголовка, который содержит множество полезных мета-шаблонов признаков, таких как is_pod
, has_virtual_destructor
, remove_extent
и т. д. Это облегчает метапрограммирование, разрешая запросы и преобразование между разными типы. Предложение основано на библиотеке Boost Type Traits.[6]
Числовые средства
Генерация случайных чисел
- новый
<random>
заголовочный файл -variate_generator
,mersenne_twister
,распределение Пуассона
, так далее. - утилиты для генерации случайных чисел с использованием любого из нескольких Генераторы псевдослучайных чисел, двигатели и распределения вероятностей
Математические специальные функции
Некоторые функции TR1, такие как математические специальные функции и некоторые дополнения C99, не включены в реализацию TR1 Visual C ++.Библиотека математических специальных функций не была стандартизирована в C ++ 11.
Эти функции, вероятно, будут представлять основной интерес для программистов инженерных и научных дисциплин.
В следующей таблице показаны все 23 специальные функции, описанные в TR1.
Название функции | Прототип функции | Математическое выражение |
---|---|---|
Ассоциированные полиномы Лагерра | двойной assoc_laguerre(без знака n, без знака m, двойной x); | |
Ассоциированные полиномы Лежандра | двойной assoc_legendre(беззнаковый l, беззнаковый m, двойной x); | |
Бета-функция | двойной бета(двойной х, двойной у); | |
Полный эллиптический интеграл первого рода | двойной comp_ellint_1(двойной к); | |
Полный эллиптический интеграл второго рода | двойной comp_ellint_2(двойной к); | |
Полный эллиптический интеграл третьего рода | двойной comp_ellint_3(двойной к, двойной ню); | |
Конфлюэнтные гипергеометрические функции | двойной conf_hyperg(двойная а, двойная с, двойная х); | |
Регулярные модифицированные цилиндрические функции Бесселя | двойной cyl_bessel_i(двойной ню, двойной х); | |
Цилиндрические функции Бесселя первого рода. | двойной cyl_bessel_j(двойной ню, двойной х); | |
Неправильные модифицированные цилиндрические функции Бесселя | двойной cyl_bessel_k(двойной ню, двойной х); | |
Цилиндрические функции Неймана | двойной cyl_neumann(двойной ню, двойной х); | |
Неполный эллиптический интеграл первого рода | двойной ellint_1(двойной к, двойной фи); | |
Неполный эллиптический интеграл второго рода | двойной ellint_2(двойной к, двойной фи); | |
Неполный эллиптический интеграл третьего рода | двойной ellint_3(двойной к, двойной ню, двойной фи); | |
Экспоненциальный интеграл | двойной истекать(двойной х); | |
Полиномы Эрмита | двойной Эрмит(беззнаковое n, двойное x); | |
Гипергеометрический ряд | двойной Hyperg(двойная а, двойная б, двойная с, двойная х); | |
Полиномы Лагерра | двойной Laguerre(беззнаковое n, двойное x); | |
Полиномы Лежандра | двойной Legendre(беззнаковый l, двойной x); | |
Дзета-функция Римана | двойной riemann_zeta(двойной х); | |
Сферические функции Бесселя первого рода. | двойной sph_bessel(беззнаковое n, двойное x); | |
Сферические связанные функции Лежандра | двойной sph_legendre(беззнаковый l, беззнаковый m, двойной тета); | |
Сферические функции Неймана | двойной sph_neumann(беззнаковое n, двойное x); |
У каждой функции есть два дополнительных варианта. Добавление суффикса ‘ж' или же 'л’К имени функции дает функцию, которая работает с плавать
или же длинный двойной
значения соответственно. Например:
плавать sph_neumannf( беззнаковый п, плавать Икс ) ;длинный двойной sph_neumannl( беззнаковый п, длинный двойной Икс ) ;
Контейнеры
Типы кортежей
- новый
<tuple>
заголовочный файл -кортеж
- на основе библиотеки Boost Tuple[7]
- смутно расширение стандарта
std :: pair
- набор элементов фиксированного размера, которые могут быть разных типы
Массив фиксированного размера
- новый
<array>
заголовочный файл -множество
- взято из библиотеки Boost Array[8]
- в отличие от типов динамических массивов, таких как стандартные
std :: vector
Хеш-таблицы
- новый
<unordered_set>
,<unordered_map>
файлы заголовков - они реализуют
unordered_set
,unordered_multiset
,unordered_map
, иunordered_multimap
классы, аналогичныенабор
,мультимножество
,карта
, иMultimap
, соответственно- к несчастью,
unordered_set
иunordered_multiset
нельзя использовать сset_union
,set_intersection
,set_difference
,set_symmetric_difference
, ивключает
стандартные библиотечные функции, которые работают длянабор
имультимножество
- к несчастью,
- новая реализация, не производная от существующей библиотеки, не полностью совместимая с API существующими библиотеками
- как все хеш-таблицы, часто предоставляют постоянное время поиск элементов, но в худшем случае может быть линейным по размеру контейнера
Обычные выражения
- новый
<regex>
заголовочный файл -регулярное выражение
,regex_match
,regex_search
,regex_replace
, так далее. - на основе библиотеки Boost RegEx[9]
- библиотека сопоставления с образцом
C совместимость
C ++ разработан, чтобы быть совместимым с Язык программирования C, но не является строгим расширением C из-за различных стандартов. TR1 пытается согласовать некоторые из этих различий путем добавления к различным заголовкам в библиотеке C ++, таким как
Технический отчет 2
В 2005 году был сделан запрос предложений по TR2 с особым интересом к Unicode, XML / HTML, сети и удобству использования для начинающих программистов.Конкурс предложений TR2.
Некоторые из предложений включали:
- Потоки [1]
- В Библиотека Asio C ++ (сеть [2][3]).
- Сигналы / слоты [sigc Предложение по стандартизации в библиотеке C ++ TR2][4]
- Библиотека файловой системы Библиотека файловой системы для TR2 - На основе библиотеки Boost Filesystem для запроса / управления путями, файлами и каталогами.
- Увеличьте любую библиотеку Любое предложение библиотеки для TR2
- Библиотека лексического преобразования Предложение библиотеки преобразования для TR2
- Новые строковые алгоритмы Предложение новых строковых алгоритмов в TR2
- К более полной таксономии алгебраических свойств числовых библиотек в TR2 ISO / IEC JTC1 / SC22 / WG21 - Документы 2008 г.
- Добавление гетерогенного сравнительного поиска в ассоциативные контейнеры для TR2 [5]
После того, как был объявлен конкурс предложений по TR2, процедуры ISO были изменены, поэтому TR2 не будет. Вместо этого усовершенствования C ++ будут опубликованы в ряде технических спецификаций. Некоторые из перечисленных выше предложений уже включены в стандарт C ++ или в черновые версии технических спецификаций.
Смотрите также
- C ++ 11, стандартный для языка программирования C ++; улучшения библиотеки основаны на TR1
- C11 (версия стандарта C), самый последний стандарт языка программирования C
- Библиотека Boost, большая коллекция переносимых библиотек C ++, некоторые из которых были включены в TR1
- Стандартная библиотека шаблонов, часть текущей стандартной библиотеки C ++
Рекомендации
- ^ "исх - 1.72.0". www.boost.org.
- ^ "Boost.SmartPtr: Библиотека интеллектуальных указателей - 1.72.0". www.boost.org.
- ^ «Глава 16. Boost.Function - 1.72.0». www.boost.org.
- ^ «Глава 1. Boost.Bind - 1.72.0». www.boost.org.
- ^ "Глава 1. Функция Boost.Member - 1.72.0". www.boost.org.
- ^ "Глава 1. Boost.TypeTraits - 1.37.0". www.boost.org.
- ^ "Библиотека кортежей Boost - Boost 1.48.0". Архивировано из оригинал на 2006-05-26. Получено 2006-05-27.
- ^ "Глава 5. Boost.Array - 1.72.0". www.boost.org.
- ^ "Boost.Regex - 1.36.0". www.boost.org.
Источники
- ISO / IEC JTC1 / SC22 / WG21 - Проект технического отчета о расширениях библиотеки C ++ (PDF) (Отчет). 2005-06-24.
- ISO / IEC TR 19768: 2007 - Информационные технологии - Языки программирования - Технический отчет о расширениях библиотеки C ++ (Отчет). Ноя 2007.
- Беккер, Питер (2006). Расширения стандартной библиотеки C ++: Учебное пособие и справочник. Эддисон-Уэсли Профессионал. ISBN 0-321-41299-0.
внешняя ссылка
- Эффективный C ++ Скотта Мейерса: информация TR1 - содержит ссылки на документы предложения TR1, которые предоставляют справочную информацию и обоснование для библиотек TR1.