Namespaces
Variants

std:: use_facet

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