std::ctype<CharT>:: narrow, do_narrow
|
Definido en el encabezado
<locale>
|
||
|
public
:
char narrow ( CharT c, char dflt ) const ; |
(1) | |
|
public
:
const
CharT
*
narrow
(
const
CharT
*
beg,
const
CharT
*
end,
|
(2) | |
|
protected
:
virtual char do_narrow ( CharT c, char dflt ) const ; |
(3) | |
|
protected
:
virtual
const
CharT
*
do_narrow
(
const
CharT
*
beg,
const
CharT
*
end,
|
(4) | |
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
)
.
[
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) .
- es decir, do_widen ( do_narrow ( c, 0 ) ) == c se cumple siempre para cualquier carácter c en el conjunto de caracteres básico del código fuente (hasta C++23) conjunto de caracteres básico (desde 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
ctypenombrada con un facetctype<char>ctc y valorctype_base::maskm (a menos quedo_narrowretorne 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
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) |