locale-Klasse
Die Klasse, die ein Gebietsschemaobjekt beschreibt, das kulturspezifische Informationen als einen Satz von Facets kapselt, die zusammen eine bestimmte lokalisierte Umgebung definieren.
Syntax
class locale;
Hinweise
Ein Facet ist ein Zeiger auf ein Objekt einer Klasse, die von der facet-Klasse abgeleitet wird. Diese verfügt über ein öffentliches Objekt in folgendem Format:
static locale::id id;
Sie können einen offenen Satz dieser Facets definieren. Sie können auch ein Gebietsschemaobjekt erstellen, das eine beliebige Anzahl von Facets festgelegt.
Vordefinierte Gruppen dieser Facets stellen die locale-Kategorien dar, die normalerweise in der Standard-C-Bibliothek von der Funktion setlocale
verwaltet werden.
Kategorie collate
(LC_COLLATE) enthält die Facets:
collate<char>
collate<wchar_t>
Kategorie ctype
(LC_CTYPE) enthält die Facets:
ctype<char>
ctype<wchar_t>
codecvt<char, char, mbstate_t>
codecvt<wchar_t, char, mbstate_t>
codecvt<char16_t, char, mbstate_t>
codecvt<char32_t, char, mbstate_t>
Kategorie monetary
(LC_MONETARY) enthält die Facets:
moneypunct<char, false>
moneypunct<wchar_t, false>
moneypunct<char, true>
moneypunct<wchar_t, true>
money_get<char, istreambuf_iterator<char>>
money_get<wchar_t, istreambuf_iterator<wchar_t>>
money_put<char, ostreambuf_iterator<char>>
money_put<wchar_t, ostreambuf_iterator<wchar_t>>
Kategorie numeric
(LC_NUMERIC) enthält die Facets:
num_get<char, istreambuf_iterator<char>>
num_get<wchar_t, istreambuf_iterator<wchar_t>>
num_put<char, ostreambuf_iterator<char>>
num_put<wchar_t, ostreambuf_iterator<wchar_t>>
numpunct<char>
numpunct<wchar_t>
Kategorie time
(LC_TIME) enthält die Facets:
time_get<char, istreambuf_iterator<char>>
time_get<wchar_t, istreambuf_iterator<wchar_t>>
time_put<char, ostreambuf_iterator<char>>
time_put<wchar_t, ostreambuf_iterator<wchar_t>>
Kategorie messages
(LC_MESSAGES) umfasst die Facets:
messages<char>
messages<wchar_t>
(Die letzte Kategorie ist von POSIX erforderlich, aber nicht der C-Standard.)
Einige dieser vordefinierten Facets werden von den iostream
Klassen verwendet, um die Konvertierung numerischer Werte in und aus Textsequenzen zu steuern.
Ein Objekt der locale-Klasse speichert einen Gebietsschemanamen als Objekt der Klasse string. Durch Verwenden eines ungültigen Gebietsschemanamens zur Erstellung eines Gebietsschemafacets oder eines Gebietsschemaobjekts wird ein Objekt der Klasse runtime_error ausgelöst. Der Name des gespeicherten Gebietsschemas ist "*"
, wenn das Gebietsschema nicht sicher sein kann, dass ein Gebietsschema im C-Stil exakt dem gebietsschema entspricht, das durch das Objekt dargestellt wird. Andernfalls können Sie ein übereinstimmende Gebietsschema innerhalb der Standard-C-Bibliothek für ein Gebietsschemaobjekt locale_object
einrichten, indem Sie den Namen().c_str())
aufrufensetlocale(LC_ALL , locale_object.
.
In dieser Implementierung können Sie außerdem die statische Memberfunktion aufrufen:
static locale empty();
zur Erstellung eines Gebietsschemaobjekts, das keine Facets hat. Es ist auch ein transparentes Gebietsschema. Wenn die Vorlagenfunktionen has_facet und use_facet das angeforderte Facet nicht in einem transparenten Gebietsschema finden können, konsultieren sie zuerst das globale Gebietsschema und dann, wenn dies transparent ist, das klassische Gebietsschema. Sie können also Folgendes schreiben:
cout.imbue(locale::empty());
Nachfolgende Einfügungen werden cout
durch den aktuellen Zustand des globalen Gebietsschemas vermittelt. Sie können sogar Folgendes schreiben:
locale loc(locale::empty(),
locale::classic(),
locale::numeric);
cout.imbue(loc);
Numerische Formatierungsregeln für nachfolgende Einfügungen in cout
bleiben gleich wie im C-Gebietsschema, auch wenn das globale Gebietsschema Änderungsregeln für das Einfügen von Datumsangaben und Währungswerten bietet.
Konstruktoren
Konstruktor | Beschreibung |
---|---|
locale | Erstellt ein Gebietsschema, eine Kopie eines Gebietsschemas oder eine Kopie des Gebietsschemas, in dem ein Facet oder eine Kategorie durch ein Facet oder eine Kategorie eines anderen Gebietsschemas ersetzt wurde. |
TypeDefs
Typname | Beschreibung |
---|---|
category | Ein ganzzahliger Typ, der Bitmaskenwerte bereitstellt, um Standardfacetfamilien anzugeben. |
Memberfunktionen
Memberfunktion | Beschreibung |
---|---|
combine | Fügt ein Facet eines angegebenen Gebietsschemas in ein Zielgebietsschema ein. |
name | Gibt den gespeicherten Gebietsschemanamen zurück. |
Statische Funktionen
Name | Beschreibung |
---|---|
Klassisch | Die statische Memberfunktion gibt ein Gebietsschemaobjekt zurück, das das klassische C-Gebietsschema darstellt. |
global | Setzt das Standardgebietsschema für das Programm zurück. |
Operatoren
Operator | Beschreibung |
---|---|
operator= | Weist ein Gebietsschema zu. |
operator!= | Prüft zwei Gebietsschemen auf Ungleichheit. |
operator( ) | Vergleicht zwei basic_string -Objekte. |
operator== | Prüft zwei Gebietsschemen auf Gleichheit. |
Klassen
Klasse | Beschreibung |
---|---|
facet | Eine Klasse, die als Basisklasse für alle Gebietsschemafacets dient. |
id |
Die Memberklasse stellt eine einzigartige Facetidentifikation bereit, die als Index zum Suchen von Facets in einem Gebietsschema verwendet wird. |
Anforderungen
Header:<locale>
Namespace: std
locale::category
Ein ganzzahliger Typ, der Bitmaskenwerte bereitstellt, um Standardfacetfamilien anzugeben.
typedef int category;
static const int collate = LC_COLLATE;
static const int ctype = LC_CTYPE;
static const int monetary = LC_MONETARY;
static const int numeric = LC_NUMERIC;
static const int time = LC_TIME;
static const int messages = LC_MESSAGES;
static const int all = LC_ALL;
static const int none = 0;
Hinweise
Der Typ ist ein Synonym für einen int
-Typ, der eine Gruppe von verschiedenen Elementen eines locale-Bitmaskentyps zur locale-Klasse darstellen kann oder als diese verwendet werden kann, um die entsprechenden C-Gebietsschemakategorien darstellen. Die Elemente sind:
collate
, entsprechend der C-Kategorie LC_COLLATEctype
, entsprechend der C-Kategorie LC_CTYPEmonetary
, entsprechend der Kategorie C LC_MONETARYnumeric
, entsprechend der Kategorie C LC_NUMERICtime
, entsprechend der C-Kategorie LC_TIMEmessages
, entsprechend der POSIX Kategorie LC_MESSAGES
Zwei weitere nützliche Werte sind:
none
, die keiner der C-Kategorien entsprechenall
, die der C-Vereinigung aller Kategorien LC_ALL
Sie können eine beliebige Gruppe von Kategorien darstellen, indem Sie eine bitweise ODER mit diesen Konstanten verwenden, wie in monetary | time
.
locale::classic
Die statische Memberfunktion gibt ein Gebietsschemaobjekt zurück, das das klassische C-Gebietsschema darstellt.
static const locale& classic();
Rückgabewert
Ein Verweis auf das C-Gebietsschema.
Hinweise
Das klassische C-Gebietsschema ist das us-amerikanische ASCII-Gebietsschema innerhalb der Standard C-Bibliothek. Es ist das Gebietsschema, das implizit in Programmen verwendet wird, die nicht internationalisiert sind.
Beispiel
// locale_classic.cpp
// compile with: /EHsc
#include <iostream>
#include <string>
#include <locale>
using namespace std;
int main( )
{
locale loc1( "german" );
locale loc2 = locale::global( loc1 );
cout << "The name of the previous locale is: " << loc2.name( )
<< "." << endl;
cout << "The name of the current locale is: " << loc1.name( )
<< "." << endl;
if (loc2 == locale::classic( ) )
cout << "The previous locale was classic." << endl;
else
cout << "The previous locale was not classic." << endl;
if (loc1 == locale::classic( ) )
cout << "The current locale is classic." << endl;
else
cout << "The current locale is not classic." << endl;
}
The name of the previous locale is: C.
The name of the current locale is: German_Germany.1252.
The previous locale was classic.
The current locale is not classic.
locale::combine
Fügt ein Facet eines angegebenen Gebietsschemas in ein Zielgebietsschema ein.
template <class Facet>
locale combine(const locale& source_locale) const;
Parameter
source_locale
Das Gebietsschema enthält das Facet, das in das Zielgebietsschema eingefügt werden soll.
Rückgabewert
Die Memberfunktion gibt ein Gebietsschemaobjekt zurück, das das in source_locale aufgelistete Facet Facet
ersetzt oder hinzufügt*this
.
Beispiel
// locale_combine.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <tchar.h>
using namespace std;
int main() {
locale loc ( "German_germany" );
_TCHAR * s1 = _T("Das ist wei\x00dfzz."); // \x00df is the German sharp-s; it comes before z in the German alphabet
_TCHAR * s2 = _T("Das ist weizzz.");
int result1 = use_facet<collate<_TCHAR> > ( loc ).
compare (s1, &s1[_tcslen( s1 )-1 ], s2, &s2[_tcslen( s2 )-1 ] );
cout << isalpha (_T ( '\x00df' ), loc ) << result1 << endl;
locale loc2 ( "C" );
int result2 = use_facet<collate<_TCHAR> > ( loc2 ).
compare (s1, &s1[_tcslen( s1 )-1 ], s2, &s2[_tcslen( s2 )-1 ] );
cout << isalpha (_T ( '\x00df' ), loc2 ) << result2 << endl;
locale loc3 = loc2.combine<collate<_TCHAR> > (loc);
int result3 = use_facet<collate<_TCHAR> > ( loc3 ).
compare (s1, &s1[_tcslen( s1 )-1 ], s2, &s2[_tcslen( s2 )-1 ] );
cout << isalpha (_T ( '\x00df' ), loc3 ) << result3 << endl;
}
facet-Klasse
Eine Klasse, die als Basisklasse für alle Gebietsschemafacets dient.
class facet {
protected:
explicit facet(size_t references = 0);
virtual ~facet();
private:
facet(const facet&) // not defined
void operator=(const facet&) // not defined
};
Hinweise
Sie können kein Objekt der Klasse facet
kopieren oder zuweisen. Sie können Objekte, die von der Klasse locale::facet
abgeleitet wurden, erstellen oder zerstören, aber nicht die Objekte der richtigen Basisklasse. In der Regel erstellen Sie ein Objekt _Myfac
, das beim facet
Erstellen eines locale
, wie in locale loc(locale::classic(), new _Myfac);
In solchen Fällen sollte der Konstruktor für die Basisklasse facet
ein Nullverweise-Argument aufweisen. Wenn das Objekt nicht mehr benötigt wird, wird es gelöscht. Geben Sie nur in seltenen Fällen ein Argument ohne Bezüge an, in denen Sie für die Lebensdauer des Objekts verantwortlich sind.
locale::global
Setzt das Standardgebietsschema für das Programm zurück. Dieser Aufruf wirkt sich auf das globale Gebietsschema sowohl für C als auch für C++ aus.
static locale global(const locale& new_default_locale);
Parameter
new_default_locale
Das Gebietsschema, das als Standardgebietsschema vom Programm verwendet werden soll.
Rückgabewert
Das vorherige Gebietsschema, bevor das Standardgebietsschema zurückgesetzt wurde.
Hinweise
Bei Programmstart ist das globale Gebietsschema gleich dem klassischen Gebietsschema. Die global()
-Funktion ruft setlocale( LC_ALL, loc.name. c_str())
auf, um ein entsprechendes Gebietsschema in der Standard-C-Bibliothek festzulegen.
Beispiel
// locale_global.cpp
// compile by using: /EHsc
#include <locale>
#include <iostream>
#include <tchar.h>
using namespace std;
int main( )
{
locale loc ( "German_germany" );
locale loc1;
cout << "The initial locale is: " << loc1.name( ) << endl;
locale loc2 = locale::global ( loc );
locale loc3;
cout << "The current locale is: " << loc3.name( ) << endl;
cout << "The previous locale was: " << loc2.name( ) << endl;
}
The initial locale is: C
The current locale is: German_Germany.1252
The previous locale was: C
id-Klasse
Die Memberklasse stellt eine einzigartige Facetidentifikation bereit, die als Index zum Suchen von Facets in einem Gebietsschema verwendet wird.
class id
{
protected: id();
private: id(const id&)
void operator=(const id&) // not defined
};
Hinweise
Die Memberklasse beschreibt das statische Memberobjekt, das von jedem Gebietsschemafacet benötigt wird. Sie können kein Objekt der Klasse id
kopieren oder zuweisen.
locale::locale
Erstellt ein Gebietsschema, eine Kopie eines Gebietsschemas oder eine Kopie des Gebietsschemas, in dem ein Facet oder eine Kategorie durch ein Facet oder eine Kategorie eines anderen Gebietsschemas ersetzt wurde. Enthält auch einen Destruktor.
locale();
explicit locale(const char* locale_name, category new_category = all);
explicit locale(const string& locale_name);
locale(const locale& from_locale);
locale(const locale& from_locale, const locale& Other, category new_category);
locale(const locale& from_locale, const char* locale_name, category new_category);
template <class Facet>
locale(const locale& from_locale, const Facet* new_facet);
~locale();
Parameter
locale_name
Der Name eines Gebietsschemas.
from_locale
Ein Gebietsschema, das zum Erstellen des neuen Gebietsschemas kopiert werden soll.
Andere
Ein Gebietsschema für die Auswahl einer Kategorie.
new_category
Die Kategorie, die im erstellten Gebietsschema ersetzt werden soll.
new_facet
Das Facet, das im erstellten Gebietsschema ersetzt werden soll.
Hinweise
Der erste Konstruktor initialisiert das Objekt, um mit dem globalen Gebietsschema übereinzustimmen. Die zweiten und dritten Konstruktoren initialisieren alle Gebietsschemakategorien, damit das Verhalten mit dem Gebietsschemanamen locale_name konsistent ist. Die restlichen Konstruktoren kopieren from_locale mit den aufgeführten Ausnahmen:
locale(const locale& from_locale, const locale& Other, category new_category);
ersetzt von "Other " diese Facets, die einer Kategorie C entsprechen, für die C & new_category nonzero ist.
locale(const locale& from_locale, const char* locale_name, category new_category);
locale(const locale& from_locale, const string& locale_name, category new_category);
ersetzt diese locale(locale_name, all)
Facets, die einer Kategorie replace_category entsprechen, für die replace_category & new_category
kein Zero ist.
template<class Facet> locale(const locale& from_locale, Facet* new_facet);
ersetzt (oder fügt zu) from_locale das Facet new_facet, wenn new_facet kein Nullzeiger ist.
Wenn der Gebietsschemaname locale_name ein Nullzeiger oder anderweitig ungültig ist, löst die Funktion runtime_error aus.
Beispiel
// locale_locale.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <tchar.h>
using namespace std;
int main( ) {
// Second constructor
locale loc ( "German_germany" );
_TCHAR * s1 = _T("Das ist wei\x00dfzz."); // \x00df is the German sharp-s, it comes before z in the German alphabet
_TCHAR * s2 = _T("Das ist weizzz.");
int result1 = use_facet<collate<_TCHAR> > ( loc ).
compare (s1, &s1[_tcslen( s1 )-1 ], s2, &s2[_tcslen( s2 )-1 ] );
cout << isalpha (_T ( '\x00df' ), loc ) << result1 << endl;
// The first (default) constructor
locale loc2;
int result2 = use_facet<collate<_TCHAR> > ( loc2 ).
compare (s1, &s1[_tcslen( s1 )-1 ], s2, &s2[_tcslen( s2 )-1 ] );
cout << isalpha (_T ( '\x00df' ), loc2 ) << result2 << endl;
// Third constructor
locale loc3 (loc2,loc, _M_COLLATE );
int result3 = use_facet<collate<_TCHAR> > ( loc3 ).
compare (s1, &s1[_tcslen( s1 )-1 ], s2, &s2[_tcslen( s2 )-1 ] );
cout << isalpha (_T ( '\x00df' ), loc3 ) << result3 << endl;
// Fourth constructor
locale loc4 (loc2, "German_Germany", _M_COLLATE );
int result4 = use_facet<collate<_TCHAR> > ( loc4 ).
compare (s1, &s1[_tcslen( s1 )-1 ], s2, &s2[_tcslen( s2 )-1 ] );
cout << isalpha (_T ( '\x00df' ), loc4 ) << result4 << endl;
}
locale::name
Gibt den gespeicherten Gebietsschemanamen zurück.
string name() const;
Rückgabewert
Eine Zeichenfolge, die den Namen des Gebietsschemas angibt.
Beispiel
// locale_name.cpp
// compile with: /EHsc
#include <iostream>
#include <string>
#include <locale>
using namespace std;
int main( )
{
locale loc1( "german" );
locale loc2 = locale::global( loc1 );
cout << "The name of the previous locale is: "
<< loc2.name( ) << "." << endl;
cout << "The name of the current locale is: "
<< loc1.name( ) << "." << endl;
}
The name of the previous locale is: C.
The name of the current locale is: German_Germany.1252.
locale::operator=
Weist ein Gebietsschema zu.
const locale& operator=(const locale& other) noexcept;
locale::operator!=
Prüft zwei Gebietsschemen auf Ungleichheit.
bool operator!=(const locale& right) const;
Parameter
right
Eines der Gebietsschemas, die auf Ungleichheit geprüft werden sollen.
Rückgabewert
Ein boolescher Wert, der lautet true
, wenn die Gebietsschemas keine Kopien desselben Gebietsschemas sind. false
Wenn es sich bei den Gebietsschemas um Kopien desselben Gebietsschemas handelt.
Hinweise
Zwei Gebietsschemas sind gleich, wenn sie dasselbe Gebietsschema sind, wenn es sich um eine Kopie der anderen handelt oder identische Namen haben.
Beispiel
// locale_op_ne.cpp
// compile with: /EHsc
#include <iostream>
#include <string>
#include <locale>
using namespace std;
int main( )
{
locale loc1( "German_Germany" );
locale loc2( "German_Germany" );
locale loc3( "English" );
if ( loc1 != loc2 )
cout << "locales loc1 (" << loc1.name( )
<< ") and\n loc2 (" << loc2.name( ) << ") are not equal." << endl;
else
cout << "locales loc1 (" << loc1.name( )
<< ") and\n loc2 (" << loc2.name( ) << ") are equal." << endl;
if ( loc1 != loc3 )
cout << "locales loc1 (" << loc1.name( )
<< ") and\n loc3 (" << loc3.name( ) << ") are not equal." << endl;
else
cout << "locales loc1 (" << loc1.name( )
<< ") and\n loc3 (" << loc3.name( ) << ") are equal." << endl;
}
locales loc1 (German_Germany.1252) and
loc2 (German_Germany.1252) are equal.
locales loc1 (German_Germany.1252) and
loc3 (English_United States.1252) are not equal.
locale::operator()
Vergleicht zwei basic_string
Objekte gemäß den lexikographischen Vergleichsregeln, die durch das Facet dieses Gebietsschemas std::collate<charT>
definiert sind.
template <class CharType, class Traits, class Allocator>
bool operator()(
const basic_string<CharType, Traits, Allocator>& left,
const basic_string<CharType, Traits, Allocator>& right) const;
Parameter
left
Die erste zu vergleichende Zeichenfolge.
right
Die zweite zu vergleichende Zeichenfolge.
Rückgabewert
true
wenn links lexikalisch kleiner als rechts ist, andernfallsfalse
.
Hinweise
Die Memberfunktion führt Folgendes aus:
const collate<CharType>& fac = use_fac<collate<CharType>>(*this);
return (fac.compare(left.begin(), left.end(), right.begin(), right.end()) < 0);
Dies bedeutet, dass Sie ein Gebietsschemaobjekt als Funktionsobjekt verwenden können.
Beispiel
// locale_op_compare.cpp
// compile with: /EHsc
#include <iostream>
#include <string>
#include <locale>
int main( )
{
using namespace std;
const wchar_t *sa = L"ztesting";
const wchar_t *sb = L"\0x00DFtesting";
basic_string<wchar_t> a( sa );
basic_string<wchar_t> b( sb );
locale loc( "German_Germany" );
cout << loc( a,b ) << endl;
const collate<wchar_t>& fac = use_facet<collate<wchar_t> >( loc );
cout << ( fac.compare( sa, sa + a.length( ),
sb, sb + b.length( ) ) < 0) << endl;
}
0
0
locale::operator==
Prüft zwei Gebietsschemen auf Gleichheit.
bool operator==(const locale& right) const;
Parameter
right
Eines der Gebietsschemas, die auf Gleichheit geprüft werden sollen.
Rückgabewert
Ein boolescher Wert, der angibt true
, ob die Gebietsschemas Kopien desselben Gebietsschemas sind. false
Wenn es sich bei den Gebietsschemas nicht um Kopien desselben Gebietsschemas handelt.
Hinweise
Zwei Gebietsschemas sind gleich, wenn sie dasselbe Gebietsschema sind, wenn es sich um eine Kopie der anderen handelt oder identische Namen haben.
Beispiel
// locale_op_eq.cpp
// compile with: /EHsc
#include <iostream>
#include <string>
#include <locale>
using namespace std;
int main( )
{
locale loc1( "German_Germany" );
locale loc2( "German_Germany" );
locale loc3( "English" );
if ( loc1 == loc2 )
cout << "locales loc1 (" << loc1.name( )
<< ")\n and loc2 (" << loc2.name( ) << ") are equal."
<< endl;
else
cout << "locales loc1 (" << loc1.name( )
<< ")\n and loc2 (" << loc2.name( ) << ") are not equal."
<< endl;
if ( loc1 == loc3 )
cout << "locales loc1 (" << loc1.name( )
<< ")\n and loc3 (" << loc3.name( ) << ") are equal."
<< endl;
else
cout << "locales loc1 (" << loc1.name( )
<< ")\n and loc3 (" << loc3.name( ) << ") are not equal."
<< endl;
}
locales loc1 (German_Germany.1252)
and loc2 (German_Germany.1252) are equal.
locales loc1 (German_Germany.1252)
and loc3 (English_United States.1252) are not equal.
Siehe auch
<locale>
Codepages
Gebietsschema-Namen, Sprachen und Zeichenfolgen für Länder und Regionen
Threadsicherheit in der C++-Standardbibliothek