C++ Technical Report 1 (TR1) es el nombre genérico del estándar ISO/IEC TR 19768, C++ Extension Libraries es un documento que propone adiciones al estándar de bibliotecas de C++. Los complementos incluyen expresiones regulares , punteros inteligentes , tablas hash y generadores de números aleatorios . TR1 no es un estándar, sino un borrador. Sin embargo, la mayoría de sus propuestas pasaron a formar parte del siguiente estándar oficial, C++11 .
El documento se distribuyó primero como borrador del Informe técnico preliminar sobre las extensiones de la biblioteca de C++ y luego se publicó como norma ISO/IEC en 2007 con el título ISO/IEC TR 19768:2007 .
Todas las adiciones que describe TR1 están en el espacio de nombres std::tr1
Definido en el archivo de cabecera tr1/funcional
Varias metaplantillas se definen en tr1/funcional : is_pod, has_virtual_destructor, remove_extent y otras. Basado en rasgos de tipo impulso.
El archivo de encabezado tr1/random define:
Algunas características de TR1, como funciones matemáticas especiales y algunas adiciones de C99 , que no están incluidas en la implementación de Visual C++ de TR1.
Estas adiciones no llegaron a C++11.
La siguiente tabla enumera las 23 funciones especiales descritas en TR1.
Nombre de la función | Prototipo de función | expresión matemática |
---|---|---|
Polinomios de Laguerre generalizados | doble assoc_laguerre (n sin signo, m sin signo, doble x) ; | |
Polinomios de Legendre asociados | doble assoc_legendre (l sin signo, m sin signo, doble x) ; | |
función beta | doble beta (doble x, doble y); | |
Integral elíptica normal completa de Legendre de primera clase | doble comp_ellint_1 (doble k) ; | |
Integral elíptica normal completa de Legendre de 2ª clase | doble comp_ellint_2 (doble k) ; | |
Integral elíptica normal completa de Legendre de tercera clase | doble comp_ellint_3 (doble k, doble nu) ; | |
Funciones hipergeométricas degeneradas | doble conf_hyperg (doble a, doble c, doble x) ; | |
Funciones de Bessel cilíndricas regulares | doble cyl_bessel_i (doble nu, doble x); | |
Funciones cilíndricas de Bessel de primera clase | doble cyl_bessel_j (doble nu, doble x); | |
es:Funciones de Bessel cilíndricas modificadas irregulares | doble cyl_bessel_k (doble nu, doble x); | |
es:Funciones cilíndricas de Neumann
es:Funciones cilíndricas de Bessel de segunda clase |
doble cyl_neumann (doble nu, doble x); | |
Integral elíptica normal incompleta de primera clase | doble ellint_1 (doble k, doble phi) ; | |
Integral elíptica normal incompleta de segunda clase | doble ellint_2 (doble k, doble phi) ; | |
Integral elíptica normal incompleta de tercera clase | doble ellint_3 (doble k, doble nu, doble phi) ; | |
Función exponencial integral | gasto doble (doble x) ; | |
Polinomios de Hermite | hermita doble (n sin signo, x doble); | |
es:Serie hipergeométrica | doble hiperg (doble a, doble b, doble c, doble x); | |
es:Polinomios de Laguerre | doble laguerre (n sin signo, doble x); | |
es:Legendre polinomios | leyenda doble (l sin signo, x doble); | |
Función zeta de Riemann | doble riemann_zeta (doble x) ; | |
es:Funciones esféricas de Bessel de primer tipo | double sph_bessel (n sin signo, doble x) ; | |
es:Funciones esféricas asociadas de Legendre | doble sph_legendre (l sin signo, m sin signo, theta doble) ; | |
es:Funciones esféricas de Neumann
es:Funciones esféricas de Bessel de segunda clase |
doble sph_neumann (n sin signo, x doble); |
Cada función tiene dos opciones adicionales. Agregar un sufijo F' o 'L' al nombre de una función da como resultado una función que actúa sobre valores flotantes o dobles largos, respectivamente. Por ejemplo:
float sph_neumannf ( n sin signo , float x ) ; long double sph_neumannl ( n sin signo , long double x ) ;El tipo de tuplas es tupla, basado en Boost Tuple, similar a la extensión std:pair para más objetos.
El tipo de arreglos de longitud fija es arreglo, basado en Boost Array.
Archivos de encabezado unordered_set, unordered_map. Tipos unordered_set, unordered_multiset, unordered_map, unordered_multimap (similar a set, multiset, map, multimap). Proporcionan un tiempo de acceso constante en promedio, pero en el peor de los casos, la duración de la operación tendrá una complejidad lineal en la cantidad de elementos en el contenedor.
archivo de encabezado regex, proporciona regex, regex_match, regex_search, regex_replace, etc. Basado en Boost RegEx
Uno de los conceptos en el desarrollo de C++ fue hacerlo lo más compatible posible con el lenguaje de programación C. Sin embargo, este concepto no era ni es una prioridad, sino que solo se recomienda encarecidamente y, por lo tanto, C ++ no puede considerarse en sentido estricto un superconjunto de C (los estándares de estos lenguajes difieren). TR1 es un intento de reconciliar algunas de las diferencias entre estos lenguajes agregando diferentes encabezados a las siguientes bibliotecas de C++: <complex>, <locale>, <cmath>etc. Estos cambios ayudan a alinear C++ con C99 (no todas las partes de C99 están incluidas en TR1).
Había planes para publicar el siguiente conjunto de adiciones, C++ Technical Report 2 , después de la estandarización de C++11 [1] . Sin embargo, el comité de estandarización abandonó posteriormente TR2 en favor de especificaciones compactas y específicas del dominio [2] .
Algunas de las extensiones sugeridas: