Espacios de nombres
Variantes

Requisitos denominados de C++: CharTraits

De cppreference.com
 
 
Requisitos denominados de C++
Números aleatorios
Concurrencia
(C++11)
(C++11)
Rangos
Vista multidimensional
Otros

 

CharTraits es una clase de rasgos que abstrae las operaciones básicas de caracteres y cadenas de texto para un tipo carácter dado. La mayoría de las clases de cadena y entrada/salida de la biblioteca estándar requieren un parámetro de tipo plantilla CharTraits junto con un parámetro de tipo plantilla un tipo de carácter correspondiente.

Requisitos

Ninguna operación CharTraits de las que se enumeran a continuación debe lanzar una excepción.

Dado

  • CharT, un tipo carácter,
  • X, un tipo CharTraits para el tipo CharT,
  • c, d, valores de tipo CharT,
  • {p, q, valores de tipo const CharT*,
  • s, un valor de tipo CharT*,
  • n, i, j, valores de tipo std::size_t,
  • e, f, valores de tipo X::int_type,
  • pos, un valor de tipo X::pos_type,
  • state, un valor de tipo X::state_type,
  • r, un lvalue de tipo CharT.


Tipos

Tipo Semánticas
X::char_type CharT
X::int_type Un tipo que puede contener todos los valores válidos de X::char_type más X::eof().
X::off_type Invoca el comportamiento definido por la implementación si no se usa std::streamoff cuando X se usa como parámetro de plantilla de rasgos en clases de entrada/salida.
X::pos_type
  • Funciones en clases de entrada/salida que devuelven este tipo utilizan X::pos_type(X::off_type(-1)) como un valor inválido para señalar un error.
  • El uso de este valor inválido como un argumento para cualquier miembro de std::istream, std::ostream o std::streambuf que acepta un valor de este tipo es comportamiento no definido.
  • Invoca comportamiento definido por la implementación si este tipo no es std::streampos cuando X se usa como el parámetro de plantilla de rasgos en clases de entrada/salida.
X::state_type Destructible, CopyAssignable, CopyConstructible, DefaultConstructible.


Expresiones

Expresión Valor de retorno Semántica Complejidad
X::eq(c,d) bool Devuelve: si c debe ser tratado como igual a d. Constante.
X::lt(c,d) bool Devuelve: si c debe ser tratado como menor que d. Constante.
X::compare(p,q,n) int Devuelve:
  • 0 si para cada i en [0,n), X::eq(p[i], q[i]) es verdadero.
  • De otra manera, un valor negativo si
    • Para alguna j en [0,n), X::lt(p[j], q[j]) es verdadero, y
    • Para cada i en [0,j), X::eq(p[i], q[i]) es verdadero.
  • De otra manera un valor positivo.
Lineal.
X::length(p) std::size_t Devuelve: la i más pequeña tal que X::eq(p[i], CharT()) es verdadero. Lineal.
X::find(p,n,c) const X::char_type* Devuelve:
  • La q más pequeña en [p,p+n) tal que X::eq(*q, c) es verdadero.
  • De otra forma, cero.
Lineal
X::move(s,p,n) X::char_type*
  • Para cada i en [0,n), realiza X::assign(s[i], p[i]).
  • Copia correctamente incluso donde los rangos [p,p+n) y [s,s+n) se superponen.
  • Devuelve: s.
Lineal.
X::copy(s,p,n) X::char_type*
  • Requiere: [p, p + n) y [s,s+n) no se superpongan.
  • Devuelve: s.
  • Para cada i en [0,n), realiza X::assign(s[i], p[i]).
Lineal.
X::assign(r,d) (No utilizado). Asigna r = d. Constante.
X::assign(s,n,c) X::char_type*
  • Para cada i en [0,n), realiza X::assign(s[i], c).
  • Devuelve: s.
Lineal.
X::not_eof(e) X::int_type Devuelve:
  • e si X::eq_int_type(e, X::eof()) es falso.
  • De otra forma, un valor f tal que X::eq_int_type(f, X::eof()) es falso.
Constante.
X::to_char_type(e) X::char_type Devuelve:
  • Si para alguna c, X::eq_int_type(e, X::to_int_type(c)) es verdadero, c.
  • De otra forma, algún valor no especificado.
Constante.
X::to_int_type(c) X::int_type Devuelve: algún valor e, restringido por las definiciones de X::to_char_type y X::eq_int_type. Constante.
X::eq_int_type(e,f) bool
  • Para toda c y d, X​::​eq(c,d) es igual a X​::​eq_int_type(X​::​to_int_type(c), X​::​to_int_type(d)).
  • Devuelve:
    • Produce X​::​eq(c,d) si para alguna c y d, e == X::to_int_type(c) y f == X::to_int_type(d).
    • De otra forma, produce verdadero si e y f son ambas copias de X​::​eof().
    • De otra manera, produce falso si una de e y f es una copia de X​::​eof() y la otra no.
    • De otra manera, el valor no está especificado.
Constante.
X​::​eof() X​::​int_type Devuelve: un valor e tal que X​::​eq_int_type(e, X​::​to_int_type(c)) es falso para todos los valores c. Constante.

Biblioteca estándar

CharTraits es requerido por las siguientes plantillas de clase de la biblioteca estándar como parámetro de tipo de plantilla:

Cadenas de texto
Almacena y manipula secuencias de caracteres.
(plantilla de clase) [editar]
Vista sobre cadena de solo lectura.
(plantilla de clase) [editar]
Flujos
Administra un búfer de flujo arbitrario.
(plantilla de clase) [editar]
Envuelve un dispositivo abstracto dado (std::basic_streambuf)
y proporciona una interfaz de entrada de alto nivel.
(plantilla de clase) [editar]
Implementa operaciones de entrada de flujo de archivo de alto nivel.
(plantilla de clase) [editar]
Implementa operaciones de entrada de flujo de cadena de alto nivel.
(plantilla de clase) [editar]
Envuelve un dispositivo abstracto dado (std::basic_streambuf)
y proporciona una interfaz de salida de alto nivel.
(plantilla de clase) [editar]
Implementa operaciones de salida de flujo de archivo de alto nivel.
(plantilla de clase) [editar]
Implementa operaciones de salida de flujo de cadena de alto nivel.
(plantilla de clase) [editar]
Envoltorio de flujo de salida sincronizado.
(plantilla de clase) [editar]
Envuelve un dispositivo abstracto dado (std::basic_streambuf)
y proporciona una interfaz de entrada/salida de alto nivel.
(plantilla de clase) [editar]
Implementa operaciones de entrada/salida de flujo de archivo de alto nivel.
(plantilla de clase) [editar]
Implementa operaciones de entrada/salida de flujo de cadena de alto nivel.
(plantilla de clase) [editar]
Implementa operaciones de entrada/salida de búfer de caracteres fijas.
(plantilla de clase) [editar]
Iteradores de flujo
Iterador de entrada que lee de un flujo de entrada (std::basic_istream).
(plantilla de clase) [editar]
Iterador de salida que escribe a un flujo de salida (std::basic_ostream).
(plantilla de clase) [editar]
bufer de flujo
Abstrae un dispositivo puro.
(plantilla de clase) [editar]
Implementa un dispositivo de archivo puro.
(plantilla de clase) [editar]
Implementa un dispositivo de cadena puro.
(plantilla de clase) [editar]
Envoltorio de un dispositivo de salida sincronizado.
(plantilla de clase) [editar]
Iteradores de bufer de flujo
Iterador de entrada que lee de un búfer de flujo (std::basic_streambuf).
(plantilla de clase) [editar]
Iterador de salida que escribe a un búfer de flujo (std::basic_streambuf).
(plantilla de clase) [editar]


CharTraits se satisface a través de las siguientes especializaciones explícitas de std::char_traits en la biblioteca estándar:

template<> class char_traits<char>;
template<> class char_traits<wchar_t>;
template<> class char_traits<char8_t>;
(desde C++20)
template<> class char_traits<char16_t>;
(desde C++11)
template<> class char_traits<char32_t>;
(desde C++11)

Informe de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 335 C++98 Los requisitos de la sobrecarga binaria de
assign no impedían las asignaciones a rvalores
su primer argumento solo
puede ser un lvalor
LWG 352 C++98 X::state_type solo requería
ser CopyConstructible
también se requiere que sea
CopyAssignable y DefaultConstructible
LWG 3085 C++98 X::copy(s, p, n) solo requería que p no esté
en [ss + n), lo cual es demasiado débil[1]
requiere que [pp + n) y
[ss + n) no se superongan
  1. [pp + n) and [ss + n) pueden superponerse, usar std::memcpy para implementar X::copy resulta en un comportamiento indefinido en este caso.