std::codecvt<InternT,ExternT,StateT>:: in, std::codecvt<InternT,ExternT,StateT>:: do_in
|
Definido en el encabezado
<locale>
|
||
|
public
:
result in
(
StateT
&
state,
|
(1) | |
|
protected
:
virtual
result do_in
(
StateT
&
state,
|
(2) | |
do_in
de la clase más derivada.
codecvt
define una conversión, traduce los caracteres externos del rango fuente
[
from
,
from_end
)
a caracteres internos, colocando los resultados en las ubicaciones subsiguientes comenzando en
to
. Convierte no más de
from_end
-
from
caracteres externos y escribe no más de
to_end
-
to
caracteres internos. Deja
from_next
y
to_next
apuntando justo después del último elemento convertido exitosamente.
Si este
codecvt
facet no define una conversión, no se convierten caracteres.
to_next
se establece igual a
to
,
state
permanece sin cambios, y se retorna
std::codecvt_base::noconv
.
do_in
(
state, from, from_end, from_next, to, to
+
1
, to_next
)
debe retornar
ok
si
-
esta
codecvtfacet es utilizada por basic_filebuf , y -
do_in
(
state, from, from_end, from_next, to, to_end, to_next
)
retornaría
okdonde to ! = to_end .
Contenidos |
Valor de retorno
Un valor de tipo std::codecvt_base::result , que indica el estado de éxito de la siguiente manera:
ok
|
conversión completada |
partial
|
espacio insuficiente en el buffer de salida o fin inesperado del buffer de origen |
error
|
se encontró un carácter que no pudo ser convertido |
noconv
|
esta faceta no convierte, no se escribió ninguna salida |
La especialización no convertidora std:: codecvt < char , char , std:: mbstate_t > siempre retorna std::codecvt_base::noconv .
Notas
Requiere que from <= from_end && to <= to_end y que state represente ya sea el estado de desplazamiento inicial o se haya obtenido convirtiendo los caracteres precedentes en la secuencia.
El efecto sobre state está deliberadamente sin especificar. En facetas estándar, se utiliza para mantener el estado de desplazamiento como cuando se llama a std::mbsrtowcs , y por lo tanto se actualiza para reflejar el estado de conversión después del último carácter externo procesado, pero una faceta definida por el usuario es libre de usarlo para mantener cualquier otro estado, por ejemplo, contar el número de caracteres especiales encontrados.
Ejemplo
#include <iostream> #include <locale> #include <string> int main() { std::locale::global(std::locale("en_US.utf8")); auto const& f = std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>> (std::locale()); std::string external = "z\u00df\u6c34\U0001d10b"; // or u8"zß水𝄋" // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b" // note that the following can be done with wstring_convert std::mbstate_t mb = std::mbstate_t(); // initial shift state std::wstring internal(external.size(), '\0'); const char* from_next; wchar_t* to_next; f.in(mb, &external[0], &external[external.size()], from_next, &internal[0], &internal[internal.size()], to_next); // error checking skipped for brevity internal.resize(to_next - &internal[0]); std::wcout << L"The string in wide encoding: " << internal << '\n'; }
Salida:
The string in wide encoding: zß水𝄋
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 76 | C++98 |
no estaba claro si la conversión debe
soportar producir un carácter interno a la vez |
solo se requiere si es usado
por basic_filebuf |
Véase también
|
[virtual]
|
lee del archivo asociado
(función miembro protegida virtual de
std::basic_filebuf<CharT,Traits>
)
|
|
convierte una cadena de bytes en una cadena ancha
(función miembro pública de
std::wstring_convert<Codecvt,Elem,Wide_alloc,Byte_alloc>
)
|
|
|
convierte una cadena de caracteres multibyte estrecha a cadena ancha, dado el estado
(función) |
|
|
[virtual]
|
convierte una cadena de
InternT
a
ExternT
, como cuando se escribe en un archivo
(función miembro protegida virtual) |