std:: use_facet
|
Definiert im Header
<locale>
|
||
|
template
<
class
Facet
>
const Facet & use_facet ( const std:: locale & loc ) ; |
||
Ruft eine Referenz auf einen von loc implementierten Facet ab.
Das Programm ist fehlerhaft, wenn Facet kein
Facet
ist, dessen Definition das öffentliche statische Mitglied
id
enthält, oder es sich um einen volatile-qualifizierten Facet handelt.
Inhaltsverzeichnis |
Parameter
| loc | - | das zu abfragende Locale-Objekt |
Rückgabewert
Gibt eine Referenz auf die Facette zurück. Die von dieser Funktion zurückgegebene Referenz bleibt gültig, solange irgendein std::locale Objekt auf diese Facette verweist.
Ausnahmen
std::bad_cast falls std:: has_facet < Facet > ( loc ) == false .
Hinweise
Ein
std::locale
-Objekt sollte kein temporäres Objekt sein, wenn auf eine Referenz des
Facet
-Objekts, das von
use_facet
erhalten wurde, nach dem Ende der Anweisung zugegriffen wird:
// SCHLECHT: auto& f = std::use_facet<std::moneypunct<char, true>>(std::locale{"no_NO.UTF-8"}); foo(f.curr_symbol()); // Fehler: f verwendet intern eine hängende Referenz // auf ein std::locale-Objekt, das nicht mehr existiert. // GUT: auto loc = std::locale{"is_IS.UTF-8"}; // OK: ein nicht-temporäres Objekt auto& f = std::use_facet<std::moneypunct<char, true>>(loc); foo(f.curr_symbol()); // OK: f verwendet intern eine Referenz auf ein existierendes Locale-Objekt.
Beispiel
Zeigt den 3-Buchstaben-Währungsnamen an, der von der 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
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 31 | C++98 |
die zurückgegebene Referenz blieb verwendbar
solange der Locale-Wert selbst existiert |
die zurückgegebene Referenz bleibt verwendbar, solange
mindestens ein Locale-Objekt auf diese Facette verweist |
| LWG 38 | C++98 |
Facet
war nicht verpflichtet, ein direktes Mitglied
id
zu haben
|
erforderlich |
| LWG 436 | C++98 |
es war unklar, ob
Facet
cv-qualifiziert sein kann
|
es kann const-qualifiziert sein, aber nicht volatile-qualifiziert |
Siehe auch
|
Menge polymorpher Facetten, die kulturelle Unterschiede kapseln
(Klasse) |
|
|
prüft, ob ein Locale eine bestimmte Facette implementiert
(Funktionstemplate) |