std::locale
| Definido en el archivo de encabezado <locale>
|
||
class locale; |
||
Un objeto de la clase std::locale es un conjunto indexado inmutable de facetas inmutables. Cada objeto de flujo de la biblioteca de entrada/salida de C++ está asociado con un objeto std::locale y utiliza sus facetas para analizar y formatear todos los datos. Además, un objeto de configuración regional está asociado con cada objeto std::basic_regex. (desde C++11) Los objetos de configuración regional también se pueden utilizar como predicados que realizan la intercalación de cadenas con los contenedores y algoritmos estándar y se puede acceder a ellos directamente para obtener o modificar las facetas que contienen.
Cada configuración regional construida en un programa de C++ contiene al menos las siguientes facetas estándar (es decir, std::has_facet devuelve true para todos estos tipos de facetas), pero un programa puede definir especializaciones adicionales o facetas completamente nuevas y agregarlas a cualquier objeto de configuración regional existente.
| Facetas admitidas | |
|---|---|
std::ctype<char>std::ctype<wchar_t>
|
std::codecvt<char, char, std::mbstate_t>std::codecvt<wchar_t, char, std::mbstate_t>
|
std::num_get<char>std::num_get<wchar_t>
|
std::numpunct<char>std::numpunct<wchar_t>
|
std::num_put<char>std::num_put<wchar_t>
| |
std::money_get<char>std::money_get<wchar_t>
|
std::moneypunct<char>std::moneypunct<char, true>std::moneypunct<wchar_t>std::moneypunct<wchar_t, true>
|
std::money_put<char>std::money_put<wchar_t>
| |
std::time_get<char>std::time_get<wchar_t>
|
std::collate<char>std::collate<wchar_t>
|
std::time_put<char>std::time_put<wchar_t>
|
std::messages<char>std::messages<wchar_t>
|
| Facetas en desuso | |
std::codecvt<char16_t, char, std::mbstate_t> (desde C++11)(en desuso en C++20)std::codecvt<char32_t, char, std::mbstate_t> (desde C++11)(en desuso en C++20)std::codecvt<char16_t, char8_t, std::mbstate_t> (desde C++20)(en desuso)std::codecvt<char32_t, char8_t, std::mbstate_t> (desde C++20)(en desuso)
| |
Internamente, un objeto de configuración regional se implementa como si fuera un puntero con recuento de referencias a un array (indexado por std::locale::id) de punteros con recuento de referencias a facetas: copiar una configuración regional solo copia un puntero e incrementa varios recuentos de referencias. Para mantener las garantías de seguridad de hilos de la biblioteca estándar de C++ (las operaciones en diferentes objetos siempre son seguras para hilos), tanto el recuento de referencias de la configuración regional como el recuento de referencias de cada faceta se actualizan de manera segura para hilos, de manera similar a std::shared_ptr.
Tipos miembro
| Tipo | Descripción |
| El tipo de índice de faceta: cada clase faceta debe declarar o heredar un miembro estático público de este tipo. (clase) | |
| La clase base para todas las categorías de facetas: cada faceta de cualquier categoría se deriva de este tipo. (clase) | |
category |
int (typedef) |
Constantes miembro
| Nombre | Explicación |
none [estático] |
Un valor cero que indica que no hay categoría de faceta. (constante miembro pública estática) |
collate [estático] |
Un valor de máscara de bits que indica la categoría de faceta de intercalación. (constante miembro pública estática) |
ctype [estático] |
Un valor de máscara de bits que indica la categoría de faceta de ctype (constante miembro pública estática) |
currency [estático] |
Un valor de máscara de bits que indica la categoría de faceta de moneda. (constante miembro pública estática) |
numeric [estático] |
Un valor de máscara de bits que indica la categoría de la faceta numérica. (constante miembro pública estática) |
time [estático] |
Un valor de máscara de bits que indica la categoría de la faceta de tiempo. (constante miembro pública estática) |
messages [estático] |
Un valor de máscara de bits que indica la categoría de la faceta de mensajes. (constante miembro pública estática) |
all [estático] |
collate | ctype | currency | numeric | time | messages (constante miembro pública estática) |
Las funciones miembro de std::locale que esperan un argumento category requieren uno de los valores de categoría definidos anteriormente, o la unión de dos o más de dichos valores. Las constantes LC no se aceptan.
Funciones miembro
| Construye una nueva configuración regional. (función miembro pública) | |
| Destruye la configuración regional y las facetas cuyo recuento de referencia se convierte en cero. (función miembro pública) | |
| Reemplaza una configuración regional. (función miembro pública) | |
| Construye una configuración regional con una faceta identificada en tiempo de compilación copiada de otra configuración regional. (función miembro pública) | |
Devuelve el nombre de la configuración regional o "*" si no tiene nombre. (función miembro pública) | |
(C++26) |
Devuelve el esquema de codificación de caracteres asociado con la configuración regional. (función miembro pública) |
(eliminado en C++20) |
Comparación de igualdad entre objetos de configuración regional. (función miembro pública) |
| Compara lexicográficamente dos cadenas utilizando la faceta de intercalación de esta configuración regional. (función miembro pública) | |
[estático] |
Cambia la configuración regional global. (función miembro estática pública) |
[estático] |
Obtiene una referencia a la configuración regional "C". (función miembro estática pública) |
Ejemplo
Demuestra el prólogo típico de un programa sensible a la configuración regional (multiplataforma).
#include <iostream>
#include <locale>
int main()
{
std::wcout << L"La configuración regional preferida por el usuario es "
<< std::locale("").name().c_str() << L'\n';
// Al iniciar, la configuración regional global es la configuración regional "C"
std::wcout << 1000.01 << L'\n';
// Reemplazar la configuración regional global de C++ y la configuración regional "C"
// con la configuración regional preferida por el usuario.
std::locale::global(std::locale(""));
// Utilizar la nueva configuración regional global para la salida de caracteres
// anchos en el futuro
std::wcout.imbue(std::locale());
// emitir el mismo número de nuevo
std::wcout << 1000.01 << L'\n';
}
Posible salida:
La configuración regional preferida por el usuario es en_US.UTF8
1000.01
1,000.01
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 340 | C++98 | El conjunto de facetas estándar que todas las configuraciones regionales deben contener no estaba claro. |
Se aclaró, |
| LWG 347 | C++98 | Los parámetros del tipo category podían aceptarconstantes LC.
|
Ya no se aceptan. |
Véase también
(C++26) |
Describe una interfaz para acceder al registro de Juegos de Caracteres IANA (clase) |
| Obtiene una faceta de una configuración regional. (plantilla de función) | |
| Comprueba si una configuración regional implementa una faceta específica. (plantilla de función) | |
| Establece la configuración regional. (función miembro pública de std::ios_base)
| |
| Devuelve la configuración regional actual. (función miembro pública de std::ios_base)
|