Namespaces
Variants

std:: use_facet

From cppreference.net
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)