C++ Technical Report 1 (TR1) является общим названием для стандарта ISO/IEC TR 19768, библиотеки расширений C++ — это документ с предложением дополнений в стандарт библиотеки C++. Дополнения включают регулярные выражения, умные указатели, хеш-таблицы, и генераторы случайных чисел. TR1 не стандарт, а скорее проект документа. Однако, большинство его предложений стало частью следующего официального стандарта, C++11.
Документ впервые был распространён в виде черновика Draft Technical Report on C++ Library Extensions, затем в 2007 году опубликован как ISO/IEC стандарт под названием ISO/IEC TR 19768:2007.
Дополнения, описанные в TR1 Все дополнения, которые описывает TR1, находятся в namespace std::tr1
Общие утилиты reference_wrapper Умные указатели: shared_ptr weak_ptr
Функциональные объекты Определены в заголовочном файле tr1/functional function bind result_of mem_fn
Метапрограммирование и type_traits Несколько меташаблонов определено в tr1/functional: is_pod, has_virtual_destructor, remove_extent, и другие. Основано на Boost Type Traits.
Генерация случайных чисел Заголовочный файл tr1/random определяет: variate_generator mersenne_twister poisson_distribution, etc.
Специальные математические функции Некоторые особенности TR1, такие, как специальные математические функции и некоторые дополнения C99, которые не включены в Visual C++ реализацию TR1.
Данные дополнения не попали в C++11.
дополнения к <cmath>/<math.h> файлы заголовков — beta, legendre и т. д.
В следующей таблице приведены все 23 специальные функции, описанные в TR1. Имя функции Прототип функции Математическое выражение Обобщённые полиномы Лягерра double assoc_laguerre(unsigned n, unsigned m, double x) ; Присоединённые многочлены Лежандра double assoc_legendre(unsigned l, unsigned m, double x) ; Бета-функция double beta(double x, double y) ; Полный нормальный эллиптический интеграл Лежандра 1-го рода double comp_ellint_1(double k) ; Полный нормальный эллиптический интеграл Лежандра 2-го рода double comp_ellint_2(double k) ; Полный нормальный эллиптический интеграл Лежандра 3-го рода double comp_ellint_3(double k, double nu) ; Вырожденные гипергеометрические функции double conf_hyperg(double a, double c, double x) ; Регулярные цилиндрические функции Бесселя double cyl_bessel_i(double nu, double x) ; Цилиндрические функции Бесселя первого рода double cyl_bessel_j(double nu, double x) ; :en:Irregular modified cylindrical Bessel functions double cyl_bessel_k(double nu, double x) ; :en:Cylindrical Neumann functions :en:Cylindrical Bessel functions of the second kind double cyl_neumann(double nu, double x) ; Неполный нормальный эллиптический интеграл 1-го рода double ellint_1(double k, double phi) ; Неполный нормальный эллиптический интеграл 2-го рода double ellint_2(double k, double phi) ; Неполный нормальный эллиптический интеграл 3-го рода double ellint_3(double k, double nu, double phi) ; Интегральная показательная функция double expint(double x) ; Многочлены Эрмита double hermite(unsigned n, double x) ; :en:Hypergeometric series double hyperg(double a, double b, double c, double x) ; :en:Laguerre polynomials double laguerre(unsigned n, double x) ; :en:Legendre polynomials double legendre(unsigned l, double x) ; Дзета-функция Римана double riemann_zeta(double x) ; :en:Spherical Bessel functions of the first kind double sph_bessel(unsigned n, double x) ; :en:Spherical associated Legendre functions double sph_legendre(unsigned l, unsigned m, double theta) ; :en:Spherical Neumann functions :en:Spherical Bessel functions of the second kind double sph_neumann(unsigned n, double x) ; Каждая функция имеет два дополнительных варианта. Добавление F 'или' L 'суффикс к имени функции дает функцию, которая действует на float или long double значения соответственно. Например: float sph_neumannf( unsigned n, float x ) ; long double sph_neumannl( unsigned n, long double x ) ;
Контейнеры Тип для кортежей — tuple, основан на Boost Tuple, похож на расширение std: pair для большего числа объектов.
Тип для массивов фиксированной длины — array, основан на Boost Array.
Хеш-контейнеры Заголовочные файлы unordered_set, unordered_map. Типы unordered_set, unordered_multiset, unordered_map, unordered_multimap (аналоги set, multiset, map, multimap). Обеспечивают в среднем константное время доступа, но в худшем случае длительность операции будет иметь линейную сложность в зависимости от количества элементов в контейнере.
Регулярные выражения Заголовочный файл regex, предоставляет regex, regex_match, regex_search, regex_replace и т. п. Основан на Boost RegEx.
Совместимость с Си Одной из концепций при разработке C++ было обеспечение как можно большей совместимости с языком программирования Си. Однако данная концепция не являлась и не является приоритетной, а лишь настоятельно рекомендованной, а потому C++ нельзя в строгом смысле считать надмножеством Си (стандарты этих языков расходятся). TR1 — это попытка примирить некоторые из различий данных языков путём добавления различных заголовков в следующие библиотеки C++: <complex>, <locale>, <cmath> и т. д. Данные изменения способствуют приведению C++ в соответствие с C99 (не все части C99 включены в TR1).
Techical Report 2 Существовали планы по публикации следующего набора дополнений, C++ Technical Report 2, после стандартизации C++11. Однако впоследствии комитет по стандартизации отказался от TR2 в пользу компактных проблемно-ориентированных спецификаций.
Некоторые из предлагаемых расширений: Потоки выполнения Работа с сетью (библиотека Asio) Сигналы и слоты Работа с файловой системой (Boost Filesystem) Типобезопасный контейнер для значений произвольных типов (Boost Any) Лексические преобразования (Boost Lexical Cast) Новые алгоритмы обработки строк Концепты некоторых алгебраических структур Поддержка гетерогенных операторов сравнения для поиска в контейнерах
См. также C++11 Boost Стандартная библиотека шаблонов
Примечания
Литература
Ссылки Scott Meyers' Effective C++: TR1 Information — contains links to the TR1 proposal documents which provide background and rationale for the TR1 libraries.
Категория:Библиотеки C++ Категория:Компьютерные и телекоммуникационные стандарты