std::use_facet
| 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) | |
| prüft, ob eine Locale eine bestimmte Facette implementiert (Funktionstemplate) |