Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De klasse die een landinstellingsobject beschrijft dat cultuurspecifieke informatie inkapselt als een set facetten die gezamenlijk een specifieke gelokaliseerde omgeving definiëren.
Syntaxis
class locale;
Opmerkingen
Een facet is een aanwijzer naar een object van een klasse die is afgeleid van klasse-facet die een openbaar object van het formulier heeft:
static locale::id id;
U kunt een open-ended set van deze facetten definiëren. U kunt ook een landinstellingsobject maken dat een willekeurig aantal facetten aanwijst.
Vooraf gedefinieerde groepen van deze facetten vertegenwoordigen de landinstellingencategorieën die traditioneel worden beheerd in de Standard C-bibliotheek door de functie setlocale.
Categorie collate (LC_COLLATE) bevat de facetten:
collate<char>
collate<wchar_t>
Categorie ctype (LC_CTYPE) bevat de facetten:
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>
Categorie monetary (LC_MONETARY) bevat de facetten:
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>>
Categorie numeric (LC_NUMERIC) bevat de facetten:
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>
Categorie time (LC_TIME) bevat de facetten:
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>>
Categorie messages (LC_MESSAGES) bevat de facetten:
messages<char>
messages<wchar_t>
(De laatste categorie is vereist voor POSIX, maar niet de C-standaard.)
Sommige van deze vooraf gedefinieerde facetten worden door de iostream klassen gebruikt om de conversie van numerieke waarden naar en van tekstreeksen te beheren.
Een object van klasse locale slaat ook een landinstellingsnaam op als een object van klassetekenreeks. Als u een ongeldige landinstellingsnaam gebruikt om een facet voor landinstellingen of een landinstellingsobject te maken, wordt een object van klasse runtime_error gegenereerd. De naam van de opgeslagen landinstelling is "*" als het landinstellingsobject niet zeker weet dat een landinstelling in C-stijl exact overeenkomt met de landinstelling die wordt vertegenwoordigd door het object. Anders kunt u een overeenkomende landinstelling instellen in de Standard C-bibliotheek, voor een bepaald landinstellingsobjectlocale_object, door de naam().c_str()) aan te roepensetlocale(LC_ALL , locale_object..
static locale empty();
Opmerking
locale::empty() is afgeschaft vanaf Visual Studio 2022 17.14. Deze wordt verwijderd vanaf MSVC Build Tools 14.51. Zie #5834 voor meer informatie.
In deze implementatie kunt u ook de functie empty() statisch lid aanroepen om een landinstellingsobject te maken dat geen facetten heeft. Het is ook een transparante landinstelling. Als de sjabloon has_facet en use_facet de aangevraagde facet niet kan vinden in een transparante landinstelling, raadplegen ze eerst de algemene landinstelling en als dat transparant is, de klassieke landinstelling. U kunt dus schrijven:
cout.imbue(locale::empty());
Volgende invoegingen worden cout gemediateerd door de huidige status van de globale landinstelling. U kunt zelfs schrijven:
locale loc(locale::empty(),
locale::classic(),
locale::numeric);
cout.imbue(loc);
Regels voor numerieke opmaak voor volgende invoegingen blijven cout hetzelfde als in de landinstelling C, zelfs als de globale landinstelling veranderende regels levert voor het invoegen van datums en monetaire bedragen.
Constructeurs
| Constructeur | Description |
|---|---|
| locale | Hiermee maakt u een landinstelling of een kopie van een landinstelling of een kopie van de landinstelling waarbij een facet of categorie is vervangen door een facet of categorie van een andere landinstelling. |
Typedefs
| Typenaam | Description |
|---|---|
| category | Een geheel getal dat bitmaskerwaarden biedt om standaard facetfamilies aan te duiden. |
Functies voor leden
| Lid, functie | Description |
|---|---|
| combineren | Hiermee voegt u een facet uit een opgegeven landinstelling in een doellandinstelling in. |
| name | Retourneert de naam van de opgeslagen landinstelling. |
Statische functies
| Naam | Description |
|---|---|
| klassiek | De functie statisch lid retourneert een landinstellingsobject dat de klassieke C-landinstelling vertegenwoordigt. |
| globaal | Hiermee stelt u de standaard lokale standaardinstelling voor het programma opnieuw in. |
Bedieners
| Operator | Description |
|---|---|
| operator= | Hiermee wordt een landinstelling toegewezen. |
| operator!= | Test twee landinstellingen voor ongelijkheid. |
| operator( ) | Vergelijkt twee basic_string objecten. |
| operator== | Test twee landinstellingen voor gelijkheid. |
Klassen
| Class | Description |
|---|---|
| facet | Een klasse die fungeert als basisklasse voor alle facetten van landinstellingen. |
id |
De lidklasse biedt een unieke facetidentificatie die wordt gebruikt als index voor het opzoeken van facetten in een landinstelling. |
Requirements
Rubriek:<oord>
naamruimte: std
landinstelling::categorie
Een geheel getal dat bitmaskerwaarden biedt om standaard facetfamilies aan te duiden.
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;
Opmerkingen
Het type is een synoniem voor een int type dat een groep afzonderlijke elementen van een bitmaskertype lokaal kan vertegenwoordigen voor de landinstelling van de klasse of kan worden gebruikt om een van de bijbehorende C-landinstellingen te vertegenwoordigen. De elementen zijn:
collate, die overeenkomt met de categorie C LC_COLLATEctype, die overeenkomt met de categorie C LC_CTYPEmonetary, die overeenkomt met de categorie C LC_MONETARYnumeric, die overeenkomt met de categorie C LC_NUMERICtime, die overeenkomt met de categorie C LC_TIMEmessages, die overeenkomt met de POSIX-categorie LC_MESSAGES
Twee nuttigere waarden zijn:
none, die overeenkomt met geen van de C-categorieënall, die overeenkomt met de C-samenvoeging van alle categorieën LC_ALL
U kunt een willekeurige groep categorieën vertegenwoordigen met behulp van een bitwise-OR met deze constanten, zoals in monetary | time.
landinstelling::klassiek
De functie statisch lid retourneert een landinstellingsobject dat de klassieke C-landinstelling vertegenwoordigt.
static const locale& classic();
Retourwaarde
Een verwijzing naar de C-landinstelling.
Opmerkingen
De klassieke C-landinstelling is de Amerikaanse ASCII-landinstelling in de Standard C-bibliotheek. Dit is de landinstelling die impliciet wordt gebruikt in programma's die niet zijn geinternationaliseerd.
Example
// 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.
landinstelling::combineren
Hiermee voegt u een facet uit een opgegeven landinstelling in een doellandinstelling in.
template <class Facet>
locale combine(const locale& source_locale) const;
Parameterwaarden
source_locale
De landinstelling die het facet bevat dat moet worden ingevoegd in de landinstelling van het doel.
Retourwaarde
De lidfunctie retourneert een landinstellingsobject dat vervangt in of toevoegt aan *this het facet Facet dat wordt vermeld in source_locale.
Example
// 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;
}
facetklasse
Een klasse die fungeert als basisklasse voor alle facetten van landinstellingen.
class facet {
protected:
explicit facet(size_t references = 0);
virtual ~facet();
private:
facet(const facet&) // not defined
void operator=(const facet&) // not defined
};
Opmerkingen
U kunt een object van klasse facetniet kopiëren of toewijzen. U kunt objecten maken en vernietigen die zijn afgeleid van klasse locale::facet , maar niet objecten van de basisklasse. Normaal gesproken maakt u een object _Myfac dat is afgeleid van facet wanneer u een locale, zoals in locale loc(locale::classic(), new _Myfac);
In dergelijke gevallen moet de constructor voor de basisklasse facet een argument nulverwijzingen hebben. Wanneer het object niet meer nodig is, wordt het verwijderd. Geef een niet-nulverwijzingenargument alleen op in zeldzame gevallen waarin u verantwoordelijk bent voor de levensduur van het object.
landinstelling::globaal
Hiermee stelt u de standaardinstelling voor het programma opnieuw in. Deze aanroep is van invloed op de globale landinstelling voor zowel C als C++.
static locale global(const locale& new_default_locale);
Parameterwaarden
new_default_locale
De landinstelling die moet worden gebruikt als de standaardlandinstelling voor het programma.
Retourwaarde
De vorige landinstelling voordat de standaardinstelling opnieuw is ingesteld.
Opmerkingen
Bij het opstarten van het programma is de algemene landinstelling hetzelfde als de klassieke landinstelling. De global() functieaanroepen setlocale( LC_ALL, loc.name. c_str()) om een overeenkomende landinstelling in de Standard C-bibliotheek tot stand te brengen.
Example
// 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
De lidklasse biedt een unieke facetidentificatie die wordt gebruikt als index voor het opzoeken van facetten in een landinstelling.
class id
{
protected: id();
private: id(const id&)
void operator=(const id&) // not defined
};
Opmerkingen
De lidklasse beschrijft het statische lidobject dat is vereist voor elke unieke landinstelling facet. U kunt een object van klasse idniet kopiëren of toewijzen.
landinstelling::landinstelling
Hiermee maakt u een landinstelling of een kopie van een landinstelling of een kopie van de landinstelling waarbij een facet of categorie is vervangen door een facet of categorie van een andere landinstelling. Bevat ook een destructor.
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();
Parameterwaarden
locale_name
Naam van een landinstelling.
from_locale
Een landinstelling die moet worden gekopieerd bij het maken van de nieuwe landinstelling.
Overige
Een landinstelling waaruit u een categorie wilt selecteren.
new_category
De categorie die moet worden vervangen door de samengestelde landinstelling.
new_facet
Het facet dat moet worden vervangen door de geconstrueerde landinstelling.
Opmerkingen
De eerste constructor initialiseert het object zodat het overeenkomt met de globale landinstelling. De tweede en derde constructors initialiseren alle landinstellingencategorieën om gedrag consistent te hebben met de landinstellingsnaam locale_name. De resterende constructors kopiëren from_locale, met de uitzonderingen vermeld:
locale(const locale& from_locale, const locale& Other, category new_category);
vervangt van Andere facetten die overeenkomen met een categorie C waarvoor C & new_category niet-nul is.
locale(const locale& from_locale, const char* locale_name, category new_category);
locale(const locale& from_locale, const string& locale_name, category new_category);
vervangt deze locale(locale_name, all) facetten die overeenkomen met een categorie replace_category waarvoor replace_category & new_category niet-nul is.
template<class Facet> locale(const locale& from_locale, Facet* new_facet);
vervangt in (of toevoegt aan) from_locale de facet-new_facet, als new_facet geen null-aanwijzer is.
Als de landinstellingsnaam locale_name een null-aanwijzer is of anderszins ongeldig is, genereert de functie runtime_error.
Example
// 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;
}
landinstelling::naam
Retourneert de naam van de opgeslagen landinstelling.
string name() const;
Retourwaarde
Een tekenreeks die de naam van de landinstelling aangeeft.
Example
// 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.
landinstelling::operator=
Hiermee wordt een landinstelling toegewezen.
const locale& operator=(const locale& other) noexcept;
landinstelling::operator!=
Test twee landinstellingen voor ongelijkheid.
bool operator!=(const locale& right) const;
Parameterwaarden
Een van de landinstellingen die moeten worden getest op ongelijkheid.
Retourwaarde
Een Booleaanse waarde die is true als de landinstellingen geen kopieën van dezelfde landinstelling zijn. Dit is false als de landinstellingen kopieën van dezelfde landinstelling zijn.
Opmerkingen
Twee landinstellingen zijn gelijk als ze dezelfde landinstelling zijn, als de ene een kopie van de andere is of als ze identieke namen hebben.
Example
// 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.
landinstelling::operator()
Vergelijkt twee basic_string objecten volgens de lexicografische vergelijkingsregels die zijn gedefinieerd door de facet van std::collate<charT> deze landinstelling.
template <class CharType, class Traits, class Allocator>
bool operator()(
const basic_string<CharType, Traits, Allocator>& left,
const basic_string<CharType, Traits, Allocator>& right) const;
Parameterwaarden
De eerste tekenreeks die moet worden vergeleken.
De tweede tekenreeks die moet worden vergeleken.
Retourwaarde
-
trueindien links lexicografisch kleiner is dan rechts, andersfalse.
Opmerkingen
De lidfunctie voert het volgende effectief uit:
const collate<CharType>& fac = use_fac<collate<CharType>>(*this);
return (fac.compare(left.begin(), left.end(), right.begin(), right.end()) < 0);
Dit betekent dat u een landinstellingsobject kunt gebruiken als een functieobject.
Example
// 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
landinstelling::operator==
Test twee landinstellingen voor gelijkheid.
bool operator==(const locale& right) const;
Parameterwaarden
Een van de landinstellingen die moeten worden getest op gelijkheid.
Retourwaarde
Een Booleaanse waarde die is true als de landinstellingen kopieën van dezelfde landinstelling zijn. Dit is false als de landinstellingen geen kopieën van dezelfde landinstelling zijn.
Opmerkingen
Twee landinstellingen zijn gelijk als ze dezelfde landinstelling zijn, als de ene een kopie van de andere is of als ze identieke namen hebben.
Example
// 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.
Zie ook
<oord>
Codepagina's
Landinstellingen, talen en tekenreeksen voor land/regio
Thread Safety in de C++-standaardbibliotheek