Namespaces
Variants

std::ctype<CharT>:: narrow, do_narrow

From cppreference.net
Definido en el encabezado <locale>
public :
char narrow ( CharT c, char dflt ) const ;
(1)
public :

const CharT * narrow ( const CharT * beg, const CharT * end,

char dflt, char * dst ) const ;
(2)
protected :
virtual char do_narrow ( CharT c, char dflt ) const ;
(3)
protected :

virtual const CharT * do_narrow ( const CharT * beg, const CharT * end,

char dflt, char * dst ) const ;
(4)
1,2) Función miembro pública, llama a la función miembro virtual protegida correspondiente do_narrow sobrecargada de la clase más derivada. La sobrecarga (1) llama a do_narrow ( c, dflt ) , la sobrecarga (2) llama a do_narrow ( beg, end, dflt, dst ) .
3) Convierte el carácter (posiblemente ancho) c a representación multibyte si el carácter puede representarse con un solo byte (por ejemplo, los caracteres ASCII en codificación UTF-8 son de un solo byte). Devuelve dflt si dicha conversión no existe.
4) Para cada carácter en el arreglo de caracteres [ beg , end ) , escribe caracteres estrechados (o dflt cuando el estrechamiento falla) a las ubicaciones sucesivas en el arreglo de caracteres apuntado por dst .

El estrechamiento siempre es exitoso y siempre es reversible (llamando a widen() ) para todos los caracteres del basic source character set (until C++23) basic character set (since C++23) .

El estrechamiento, si tiene éxito, preserva todas las categorías de clasificación de caracteres conocidas por is() .

  • es decir, is ( m, c ) || ! ctc. is ( m, do_narrow ( c, dflt ) ) siempre es true para cualquier categoría ctype nombrada con un facet ctype<char> ctc y valor ctype_base::mask m (a menos que do_narrow retorne dflt ).

El estrechamiento de cualquier carácter de dígito garantiza que si el resultado se resta del literal de carácter '0' , la diferencia es igual al valor numérico del carácter original.

  • es decir, para cualquier carácter de dígito c , la expresión ( do_narrow ( c, dflt ) - '0' ) evalúa al valor numérico del carácter.

Contenidos

Parámetros

c - carácter a convertir
dflt - valor predeterminado a producir si la conversión falla
beg - puntero al primer carácter en un array de caracteres a convertir
end - puntero una posición después del final para el array de caracteres a convertir
dst - puntero al primer elemento del array de caracteres a llenar

Valor de retorno

1,3) Carácter reducido o dflt si la reducción falla.
2,4) end

Ejemplo

#include <iostream>
#include <locale>
void try_narrow(const std::ctype<wchar_t>& f, wchar_t c)
{
    char n = f.narrow(c, 0);
    if (n)
        std::wcout << '\'' << c << "' narrowed to " << +(unsigned char)n << '\n';
    else
        std::wcout << '\'' << c << "' could not be narrowed\n";
}
int main()
{
    std::locale::global(std::locale("en_US.utf8"));
    std::wcout.imbue(std::locale());
    std::wcout << std::hex << std::showbase << "In US English UTF-8 locale:\n";
    auto& f = std::use_facet<std::ctype<wchar_t>>(std::locale());
    try_narrow(f, L'A');
    try_narrow(f, L'A');
    try_narrow(f, L'ě');
    std::locale::global(std::locale("cs_CZ.iso88592"));
    auto& f2 = std::use_facet<std::ctype<wchar_t>>(std::locale());
    std::wcout << "In Czech ISO-8859-2 locale:\n";
    try_narrow(f2, L'A');
    try_narrow(f2, L'A');
    try_narrow(f2, L'ě');
}

Salida posible:

In US English UTF-8 locale:
'A' narrowed to 0x41
'A' could not be narrowed
'ě' could not be narrowed
In Czech ISO-8859-2 locale:
'A' narrowed to 0x41
'A' could not be narrowed
'ě' narrowed to 0xec

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 126 C++98 1. el código que representaba la reversibilidad era
do_widen ( do_narrow ( c ) , 0 ) == c
2. el código que representaba la preservación de categoría era
is ( m, c ) || ! ctc. is ( m, do_narrow ( c ) , dflt )
ambos corregidos
LWG 153 C++98 narrow siempre llamaba a la sobrecarga (4) llama a la sobrecarga correspondiente

Véase también

invoca do_widen
(función miembro pública)
reduce caracteres
(función miembro pública de std::basic_ios<CharT,Traits> )
reduce un carácter ancho a un carácter estrecho de un solo byte, si es posible
(función)