std:: use_facet
| 
           
           Défini dans l'en-tête
            
         
            
             <locale>
            
           
           | 
         ||
| 
           
           
            
             template
            
            
             <
            
            
             class
            
            Facet
            
             >
            
             
         const Facet & use_facet ( const std:: locale & loc ) ;  | 
         ||
Obtient une référence à un facet implémenté par loc .
       Le programme est mal formé si Facet n'est pas un
       
        facet
       
       dont la définition contient le membre statique public
       
        
         id
        
       
       ou s'il s'agit d'un facet qualifié volatile.
      
         Table des matières | 
       
Paramètres
| loc | - | l'objet de paramètres régionaux à interroger | 
Valeur de retour
Retourne une référence au facet. La référence retournée par cette fonction est valide tant qu'un objet std::locale quelconque fait référence à ce facet.
Exceptions
std::bad_cast si std:: has_facet < Facet > ( loc ) == false .
Notes
       Un objet
       
        
         std::locale
        
       
       ne devrait pas être temporaire si une référence à l'objet
       
        Facet
       
       obtenu à partir de
       
        use_facet
       
       est utilisée après la fin de l'instruction :
      
// MAUVAIS : auto& f = std::use_facet<std::moneypunct<char, true>>(std::locale{"no_NO.UTF-8"}); foo(f.curr_symbol()); // Erreur : f utilise en interne une référence pendante // vers un objet std::locale qui n'existe plus. // BON : auto loc = std::locale{"is_IS.UTF-8"}; // OK : un objet non temporaire auto& f = std::use_facet<std::moneypunct<char, true>>(loc); foo(f.curr_symbol()); // OK : f utilise en interne une référence vers un objet locale existant.
Exemple
Affichez le nom de devise à 3 lettres utilisé par les paramètres régionaux préférés de l'utilisateur.
#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'; }
Sortie :
Your currency string is USD Your currency string is EUR Your currency string is GBP
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Applicable à | Comportement publié | Comportement corrigé | 
|---|---|---|---|
| LWG 31 | C++98 | 
         la référence retournée restait utilisable
          tant que la valeur de locale elle-même existe  | 
        
         la référence retournée reste utilisable tant
          qu'au moins un objet locale fait référence à cette facette  | 
       
| LWG 38 | C++98 | 
         
          Facet
         
         n'était pas requis d'avoir un membre direct
         
          
           id
          
         
         | 
        requis | 
| LWG 436 | C++98 | 
         il n'était pas clair si
         
          Facet
         
         peut être qualifié cv
         | 
        il peut être qualifié const, mais pas volatile | 
Voir aussi
| 
         ensemble de facettes polymorphes qui encapsulent les différences culturelles
          (classe)  | 
       |
| 
         vérifie si une locale implémente une facette spécifique
          (modèle de fonction)  |