std:: use_facet
|
Definido en el encabezado
<locale>
|
||
|
template
<
class
Facet
>
const Facet & use_facet ( const std:: locale & loc ) ; |
||
Obtiene una referencia a una faceta implementada por loc .
El programa está mal formado si Facet no es un
facet
cuya definición contenga el miembro estático público
id
o si es un facet calificado como volatile.
Contenidos |
Parámetros
| loc | - | el objeto de configuración regional a consultar |
Valor de retorno
Devuelve una referencia al facet. La referencia devuelta por esta función es válida mientras cualquier std::locale object haga referencia a ese facet.
Excepciones
std::bad_cast si std:: has_facet < Facet > ( loc ) == false .
Notas
Un objeto
std::locale
no debe ser temporal si se utiliza una referencia al objeto
Facet
obtenido de
use_facet
después del final de la sentencia:
// MALO: auto& f = std::use_facet<std::moneypunct<char, true>>(std::locale{"no_NO.UTF-8"}); foo(f.curr_symbol()); // Error: f utiliza internamente una referencia colgante // a un objeto std::locale que ya no existe. // BUENO: auto loc = std::locale{"is_IS.UTF-8"}; // OK: un objeto no temporal auto& f = std::use_facet<std::moneypunct<char, true>>(loc); foo(f.curr_symbol()); // OK: f utiliza internamente una referencia a un objeto locale existente.
Ejemplo
Muestra el nombre de moneda de 3 letras utilizado por la configuración regional preferida del usuario.
#include <iostream> #include <locale> int main() { for (const char* name: {"en_US.UTF-8", "de_DE.UTF-8", "en_GB.UTF-8"}) std::cout << "Your currency string is " << std::use_facet<std::moneypunct<char, true>>(std::locale{name}). curr_symbol() << '\n'; }
Salida:
Your currency string is USD Your currency string is EUR Your currency string is GBP
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 31 | C++98 |
la referencia devuelta permanecía usable
mientras existiera el valor de locale mismo |
la referencia devuelta permanece usable
mientras algún objeto locale haga referencia a esa faceta |
| LWG 38 | C++98 |
Facet
no estaba requerido tener un miembro directo
id
|
requerido |
| LWG 436 | C++98 |
no estaba claro si
Facet
puede estar calificado con cv
|
puede estar calificado con const, pero no con volatile |
Véase también
|
conjunto de facetas polimórficas que encapsulan diferencias culturales
(clase) |
|
|
verifica si una localización implementa una faceta específica
(plantilla de función) |