Articulo de referencia

Informe técnico de C++ 1

El Informe Técnico 1 de C++ ( TR1 ) es el nombre común del documento ISO/IEC TR 19768, Extensiones de la Biblioteca de C++, que proponía adiciones a la biblioteca estándar de C+...

El Informe Técnico 1 de C++ ( TR1 ) es el nombre común del documento ISO/IEC TR 19768, Extensiones de la Biblioteca de C++, que proponía adiciones a la biblioteca estándar de C++ para el estándar de lenguaje C++03 . Estas adiciones incluían expresiones regulares , punteros inteligentes , tablas hash y generadores de números aleatorios . TR1 no era un estándar en sí mismo, sino un borrador. Sin embargo, la mayoría de sus propuestas se incorporaron posteriormente al estándar oficial, C++11 . Antes de la estandarización de C++11, los proveedores utilizaban este documento como guía para crear extensiones. El objetivo del informe era "fomentar una práctica más generalizada para una biblioteca estándar de C++ ampliada".

El informe se distribuyó por primera vez en forma de borrador en 2005 con el título de Borrador de Informe Técnico sobre Extensiones de Bibliotecas de C++ , y posteriormente se publicó en 2007 como norma ISO/IEC con el título ISO/IEC TR 19768:2007 .

Descripción general

Los compiladores no necesitaban incluir los componentes de TR1 para cumplir con el estándar C++, ya que las propuestas de TR1 no formaban parte del estándar en sí, sino que eran solo un conjunto de posibles adiciones pendientes de ratificación. Sin embargo, la mayor parte de TR1 estaba disponible en Boost , y varios distribuidores de compiladores y bibliotecas implementaron todos o algunos de sus componentes. TR1 no es la lista completa de las adiciones a la biblioteca que aparecieron en C++11 . Por ejemplo, C++11 incluye una biblioteca de soporte para subprocesos que no está disponible en TR1.

Los nuevos componentes se definieron en el std::tr1espacio de nombres para distinguirlos de la biblioteca estándar vigente en ese momento.

Componentes

TR1 incluye los siguientes componentes:

Servicios generales

Envoltorio de referencia : permite pasar referencias , en lugar de copias, a algoritmos u objetos de función. Esta característica se basa en Boost.Ref. [ 1 ] Una referencia de envoltorio se obtiene de una instancia de la clase plantilla reference_wrapper. Las referencias de envoltorio son similares a las referencias normales ('&') del lenguaje C++. Para obtener una referencia de envoltorio de cualquier objeto, se utiliza la clase plantilla ref(para una referencia constante crefse utiliza ).

Las referencias de envoltura son útiles sobre todo para las funciones de plantilla, cuando la deducción de argumentos no deduciría una referencia (por ejemplo, al reenviar argumentos):

#include <iostream> #include <tr1/functional>void f ( int & r ) { ++ r ; }plantilla < clase Func , clase Arg > void g ( Func f , Arg t ) { f ( t ); }int main () { int i = 0 ;g ( f , i ); // Se instancia 'g<void(int& r), int>' std :: cout << i << " \n " ; // Salida: 0g ( f , std :: tr1 :: ref ( i )); // 'g<void(int& r), std::tr1::reference_wrapper<int>>' se instancia std :: cout << i << " \n " ; // Salida: 1 }

Punteros inteligentes : añade varias clases que simplifican la gestión del ciclo de vida de los objetos en casos complejos. Se añaden tres clases principales:

  • shared_ptr– un puntero inteligente con conteo de referencias
  • weak_ptr– una variante shared_ptrque no aumenta el contador de referencias

La propuesta se basa en la biblioteca Boost Smart Pointer. [ 2 ]

Objetos de función

Estos cuatro módulos se añaden al <functional>archivo de cabecera:

Envoltorio de función polimórfica ( function) – puede almacenar cualquier función invocable (punteros a funciones, punteros a funciones miembro y objetos de función) que utilice una firma de llamada a función específica. El tipo no depende del tipo de función invocable utilizada. Basado en Boost.Function [ 3 ]

Los enlazadores de objetos de función ( bind) permiten enlazar cualquier parámetro a objetos de función. También se permite la composición de funciones. Esta es una versión generalizada de las funciones estándar std::bind1sty std::bind2ndde enlace. La característica se basa en la biblioteca Boost Bind. [ 4 ]

Tipos de retorno de función ( result_of) – determina el tipo de una expresión de llamada.

Funciones miembro ( mem_fn) – mejora del estándar std::mem_funy std::mem_fun_ref. Permite que los punteros a funciones miembro se traten como objetos de función. Basado en la biblioteca Boost Mem Fn. [ 5 ]

Metaprogramación y rasgos tipográficos.

Ahora existe <type_traits>un archivo de cabecera que contiene muchas metaplantillas de rasgos útiles, como is_pod, has_virtual_destructor, remove_extent, etc. Facilita la metaprogramación al permitir consultas y transformaciones entre diferentes tipos . La propuesta se basa en la biblioteca Boost Type Traits. [ 6 ]

Instalaciones numéricas

generación de números aleatorios

Funciones especiales matemáticas

Algunas características de TR1, como las funciones especiales matemáticas y ciertas adiciones de C99, no están incluidas en la implementación de TR1 en Visual C++. La biblioteca de funciones especiales matemáticas no se estandarizó en C++11.

  • adiciones a los archivos de encabezado <cmath>/ – , , etc.<math.h>betalegendre

Es probable que estas funciones sean de principal interés para los programadores de las disciplinas de ingeniería y ciencias.

La siguiente tabla muestra las 23 funciones especiales descritas en TR1.

Cada función tiene dos variantes adicionales. Al añadir el sufijo ' f ' o ' l ' al nombre de una función, se obtiene una función que opera sobre valores floato , long doublerespectivamente. Por ejemplo:

float sph_neumannf ( unsigned int n , float x ); long double sph_neumannl ( unsigned int n , long double x );

contenedores

Tipos de tuplas

  • nuevo <tuple>archivo de encabezado –tuple
  • basado en la biblioteca Boost Tuple [ 7 ]
  • vagamente una extensión del estándarstd::pair
  • Colección de elementos de tamaño fijo, que pueden ser de diferentes tipos.

Matriz de tamaño fijo

  • nuevo <array>archivo de encabezado –array
  • tomado de la biblioteca Boost Array [ 8 ]
  • a diferencia de los tipos de matrices dinámicas como el estándarstd::vector

Tablas hash

  • nuevos <unordered_set>archivos de cabecera<unordered_map>
  • Implementan las clases unordered_set, unordered_multiset, unordered_map, y unordered_multimap, análogas a set, multiset, map, y multimap, respectivamente
    • Desafortunadamente, unordered_sety unordered_multisetno se puede utilizar con las funciones de la biblioteca estándar set_union, set_intersection, set_difference, set_symmetric_difference, y includes, que funcionan para setymultiset
  • Nueva implementación, no derivada de una biblioteca existente, no totalmente compatible con la API de las bibliotecas existentes.
  • Al igual que todas las tablas hash , suelen proporcionar una búsqueda de elementos en tiempo constante , pero en el peor de los casos puede ser lineal con respecto al tamaño del contenedor.

expresiones regulares

  • nuevo <regex>archivo de encabezado – regex, regex_match, regex_search, regex_replace, etc.
  • basado en la biblioteca Boost RegEx [ 9 ]
  • biblioteca de coincidencia de patrones

Compatibilidad con C

C++ está diseñado para ser compatible con el lenguaje de programación C , pero no es un superconjunto estricto de C debido a la divergencia de sus estándares. TR1 intenta conciliar algunas de estas diferencias mediante la adición de varios encabezados a la biblioteca de C++, como <complex>, <locale>, <cmath>, etc. Estos cambios ayudan a que C++ se ajuste mejor a la versión C99 del estándar C (no todas las partes de C99 están incluidas en TR1).

Informe técnico 2

En 2005, se realizó una solicitud de propuestas para un TR2 con especial interés en Unicode, XML/HTML, redes y usabilidad para programadores novatos. Convocatoria de propuestas para TR2 .

Algunas de las propuestas incluían:

  • Trapos
  • La biblioteca Asio C++ (redes)).
  • Señales/Ranuras [ sigc ] Propuesta de estandarización en la biblioteca C++ TR2
  • Biblioteca del sistema de archivos Biblioteca del sistema de archivos para TR2 : basada en la biblioteca del sistema de archivos Boost, para la consulta y manipulación de rutas, archivos y directorios.
  • Impulsa cualquier biblioteca. Propuesta para cualquier biblioteca en TR2.
  • Propuesta de biblioteca de conversión léxica para TR2
  • Propuesta de nuevos algoritmos de cadena para TR2
  • Hacia una taxonomía más completa de propiedades algebraicas para bibliotecas numéricas en TR2 ISO/IEC JTC1/SC22/WG21 - Documentos 2008
  • Agregar búsqueda de comparación heterogénea a contenedores asociativos para TR2

Tras la convocatoria de propuestas para TR2, se modificaron los procedimientos de la ISO, por lo que no habrá TR2. En su lugar, se publicarán mejoras a C++ en varias especificaciones técnicas. Algunas de las propuestas mencionadas anteriormente ya están incluidas en el estándar de C++ o en borradores de las especificaciones técnicas.

Véase también

Referencias

  1. "ref - 1.72.0" . www.boost.org .
  2. "Boost.SmartPtr: La biblioteca de punteros inteligentes - 1.72.0" . www.boost.org .
  3. "Capítulo 16. Boost.Function - 1.72.0" . www.boost.org .
  4. "Capítulo 1. Boost.Bind - 1.72.0" . www.boost.org .
  5. "Capítulo 1. Función Boost.Member - 1.72.0" . www.boost.org .
  6. "Capítulo 1. Boost.TypeTraits - 1.37.0" . www.boost.org .
  7. "La biblioteca de tuplas de Boost – Boost 1.48.0" . Archivado del original el 26 de mayo de 2006. Consultado el 27 de mayo de 2006 .
  8. "Capítulo 5. Boost.Array - 1.72.0" . www.boost.org .
  9. "Boost.Regex - 1.36.0" . www.boost.org .

Fuentes

  • ISO/IEC JTC1/SC22/WG21 — Borrador del informe técnico sobre extensiones de bibliotecas de C++ (PDF) (Informe). 24 de junio de 2005.
  • ISO/IEC TR 19768:2007 — Tecnología de la información — Lenguajes de programación — Informe técnico sobre extensiones de bibliotecas de C++ (Informe). Noviembre de 2007.
  • Becker, Peter (2006). Extensiones de la biblioteca estándar de C++: Tutorial y referencia . Addison-Wesley Professional. ISBN 0-321-41299-0.
  • El libro "Effective C++: TR1 Information " de Scott Meyers contiene enlaces a los documentos de la propuesta TR1, que proporcionan información general y la justificación de las bibliotecas TR1.