std::char_traits
Definido en el archivo de encabezado <string>
|
||
template< class CharT |
||
La clase char_traits
es una plantilla de clase de rasgos que abstrae las operaciones básicas de caracteres y de cadenas para un tipo de carácter dado. El conjunto de operaciones definido es tal que los algoritmos genéricos casi siempre se garantiza que se implementarán en términos de tal conjunto. Es así que es posible usar tales algoritmos con casi cualquier tipo de carácter o de cadena, simplemente suplementando una clase char_traits
personalizada.
La plantilla de clase char_traits
sirve como base para instanciaciones explícitas. El usuario puede proporcionar una especialización para cualquier tipo de carácter personalizado.
Si una operación sobre los rasgos emite una excepción, el comportamiento es indefinido.
Contenido |
[editar] Especializaciones estándar
Las definiciones de tipo miembro (typedefs) de las especializaciones estándar son las siguientes.
Especialización | char_type
|
int_type
|
pos_type
|
---|---|---|---|
std::char_traits<char> | char | int | std::streampos |
std::char_traits<wchar_t> | wchar_t | std::wint_t | std::wstreampos |
std::char_traits<char16_t> (C++11) | char16_t | std::uint_least16_t | std::u16streampos |
std::char_traits<char32_t> (C++11) | char32_t | std::uint_least32_t | std::u32streampos |
std::char_traits<char8_t> (C++20) | char8_t | unsigned int | std::u8streampos |
Tipo miembro | Definición (igual entre todas las especializaciones estándar) |
---|---|
off_type
|
std::streamoff |
state_type
|
std::mbstate_t |
comparison_category (C++20)
|
std::strong_ordering |
La semántica de las funciones miembro de las especializaciones estándar se define de la siguiente manera.
Especialización | assign
|
eq
|
lt
|
eof
|
---|---|---|---|---|
std::char_traits<char> | = | == para unsigned char
|
< para unsigned char
|
EOF |
std::char_traits<wchar_t> | = | == | < | WEOF |
std::char_traits<char16_t> (C++11) | = | == | < | unidad de código UTF-16 inválida |
std::char_traits<char32_t> (C++11) | = | == | < | unidad de código UTF-32 inválida |
std::char_traits<char8_t> (C++20) | = | == | < | unidad de código UTF-8 inválida |
Las especializaciones estándar de la plantilla de clase char_traits
satisfacen los requerimientos de CharTraits.
[editar] Tipos miembro
Tipo | Definición |
char_type
|
CharT
|
int_type
|
Un tipo entero que puede alojar todos los valores de char_type más EOF
|
off_type
|
definido por la implementación |
pos_type
|
definido por la implementación |
state_type
|
definido por la implementación |
[editar] Funciones miembro
[estático] |
Asigna un carácter (función miembro estática pública) |
[estático] |
compara dos caracteres Original: compares two characters The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro estática pública) |
[estático] |
mueve una secuencia de caracteres a otra Original: moves one character sequence onto another The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro estática pública) |
[estático] |
copia una secuencia de caracteres Original: copies a character sequence The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro estática pública) |
[estático] |
lexicográfico compara dos secuencias de caracteres Original: lexicographically compares two character sequences The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro estática pública) |
[estático] |
devuelve la longitud de una secuencia de caracteres Original: returns the length of a character sequence The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro estática pública) |
[estático] |
finds a character in a character sequence (función miembro estática pública) |
[estático] |
int_type convierte a char_type equivalenteOriginal: converts int_type to equivalent char_type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro estática pública) |
[estático] |
char_type convierte a int_type equivalenteOriginal: converts char_type to equivalent int_type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro estática pública) |
[estático] |
compara dos valores int_type Original: compares two int_type valuesThe text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función miembro estática pública) |
[estático] |
Devuelve un valor eof. (función miembro estática pública) |
[estático] |
Comprueba si un carácter es el valor eof. (función miembro estática pública) |
[editar] Ejemplo
Los rasgos de carácter definidos por el usuario pueden usarse para proporcionar comparación insensible a las mayúsculas
#include <string> #include <string_view> #include <iostream> #include <cctype> struct ci_char_traits : public std::char_traits<char> { static char to_upper(char ch) { return std::toupper((unsigned char) ch); } static bool eq(char c1, char c2) { return to_upper(c1) == to_upper(c2); } static bool lt(char c1, char c2) { return to_upper(c1) < to_upper(c2); } static int compare(const char* s1, const char* s2, std::size_t n) { while ( n-- != 0 ) { if ( to_upper(*s1) < to_upper(*s2) ) return -1; if ( to_upper(*s1) > to_upper(*s2) ) return 1; ++s1; ++s2; } return 0; } static const char* find(const char* s, std::size_t n, char a) { auto const ua (to_upper(a)); while ( n-- != 0 ) { if (to_upper(*s) == ua) return s; s++; } return nullptr; } }; template<class DstTraits, class CharT, class SrcTraits> constexpr std::basic_string_view<CharT, DstTraits> traits_cast(const std::basic_string_view<CharT, SrcTraits> src) noexcept { return {src.data(), src.size()}; } int main() { using namespace std::literals; constexpr auto s1 = "Hola"sv; constexpr auto s2 = "hoLA"sv; if (traits_cast<ci_char_traits>(s1) == traits_cast<ci_char_traits>(s2)) std::cout << s1 << " and " << s2 << " son iguales\n"; }
Salida:
Hola y hoLA son iguales
[editar] Véase también
Almacena y manipula secuencias de caracteres. (plantilla de clase) |