Espacios de nombres
Variantes
Acciones

std::char_traits

De cppreference.com
< cpp‎ | string
Definido en el archivo de encabezado <string>
template<

    class CharT

> class char_traits;

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) [editar]
[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) [editar]
[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) [editar]
[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) [editar]
[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) [editar]
[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) [editar]
[estático]
finds a character in a character sequence
(función miembro estática pública) [editar]
[estático]
int_type convierte a char_type equivalente
Original:
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) [editar]
[estático]
char_type convierte a int_type equivalente
Original:
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) [editar]
[estático]
compara dos valores int_type
Original:
compares two int_type values
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) [editar]
[estático]
Devuelve un valor eof.
(función miembro estática pública) [editar]
[estático]
Comprueba si un carácter es el valor eof.
(función miembro estática pública) [editar]

[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) [editar]