Namensräume
Varianten
Aktionen

std::use_facet

Von cppreference.com
< cpp‎ | locale
 
 
 
 
Definiert in Header <locale>
template< class Facet >
const Facet& use_facet( const std::locale& loc );

Ruft eine Referenz auf ein von loc implementiertes Facet ab.

Das Programm ist schlecht geformt, wenn Facet kein Facet ist, dessen Definition das öffentliche statische Mitglied id enthält, oder wenn es sich um ein volatil qualifiziertes Facet handelt.

Inhalt

[bearbeiten] Parameter

loc - das abzufragende Locale-Objekt

[bearbeiten] Rückgabewert

Gibt eine Referenz auf das Facet zurück. Die von dieser Funktion zurückgegebene Referenz ist gültig, solange irgendein std::locale-Objekt auf dieses Facet verweist.

[bearbeiten] Ausnahmen

std::bad_cast wenn std::has_facet<Facet>(loc) == false.

[bearbeiten] Hinweise

Ein std::locale-Objekt sollte kein temporäres Objekt sein, wenn eine Referenz auf das von use_facet erhaltene Facet-Objekt nach dem Ende der Anweisung verwendet wird.

// BAD:
auto& f = std::use_facet<std::moneypunct<char, true>>(std::locale{"no_NO.UTF-8"});
foo(f.curr_symbol()); // Error: f internally uses a dangling reference
                      // to a std::locale object that no longer exists.
// GOOD:
auto loc = std::locale{"is_IS.UTF-8"}; // OK: a non-temporary object
auto& f = std::use_facet<std::moneypunct<char, true>>(loc);
foo(f.curr_symbol()); // OK: f internally uses a reference to existing locale object.

[bearbeiten] Beispiel

Zeigt den 3-Buchstaben-Währungsnamen an, der vom bevorzugten Locale des Benutzers verwendet wird.

#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';
}

Ausgabe

Your currency string is USD
Your currency string is EUR
Your currency string is GBP

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 31 C++98 die zurückgegebene Referenz blieb nutzbar
solange der Locale-Wert selbst existierte
die zurückgegebene Referenz bleibt nutzbar,
solange irgendein Locale-Objekt auf dieses Facet verweist
LWG 38 C++98 Facet musste kein direktes Member id haben Gefordert
LWG 436 C++98 Es war unklar, ob Facet cv-qualifiziert sein kann Es kann const-qualifiziert sein, aber nicht volatile-qualifiziert

[bearbeiten] Siehe auch

Satz von polymorphen Facetten, die kulturelle Unterschiede kapseln
(Klasse) [bearbeiten]
prüft, ob eine Locale eine bestimmte Facette implementiert
(Funktionstemplate) [bearbeiten]