locale – třída
Třída, která popisuje místní objekt, který zapouzdří informace specifické pro jazykovou verzi jako sadu omezujících vlastností, jež společně definují určité lokalizované prostředí.
Syntaxe
class locale;
Poznámky
Omezující vlastnost je ukazatel na objekt třídy odvozený z omezující vlastnosti třídy, která má veřejný objekt formuláře:
static locale::id id;
Můžete definovat neuzavřenou množinu těchto omezujících vlastností. Můžete také sestavit objekt národního prostředí, který určuje libovolný počet omezujících vlastností.
Předdefinované skupiny těchto omezujících vlastností představují kategorie národního prostředí tradičně spravované ve standardní knihovně jazyka C funkcí setlocale
.
Kategorie collate
(LC_COLLATE) zahrnuje omezující vlastnosti:
collate<char>
collate<wchar_t>
Kategorie ctype
(LC_CTYPE) zahrnuje omezující vlastnosti:
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) zahrnuje omezující vlastnosti:
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) zahrnuje omezující vlastnosti:
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) zahrnuje omezující vlastnosti:
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) zahrnuje omezující vlastnosti:
messages<char>
messages<wchar_t>
(Funkce POSIX vyžaduje poslední kategorii, ale nikoli standard C.)
Některé z těchto předdefinovaných omezujících vlastností používají iostream
třídy k řízení převodu číselných hodnot do a z textových sekvencí.
Objekt národního prostředí třídy také ukládá název národního prostředí jako objekt řetězce třídy. Použití neplatného názvu národního prostředí k vytvoření omezující vlastnosti národního prostředí nebo objekt národního prostředí vyvolá objekt třídy runtime_error. Název uloženého národního prostředí je "*"
v případě, že objekt národního prostředí nemůže být jistý, že národní prostředí ve stylu jazyka C přesně odpovídá národnímu prostředí reprezentovaným objektem. V opačném případě můžete vytvořit odpovídající národní prostředí v rámci standardní knihovny jazyka C pro určitý objekt locale_object
národního prostředí zavoláním setlocale(LC_ALL , locale_object.
názvu().c_str())
.
V této implementaci můžete také volat statickou členskou funkci:
static locale empty();
k vytvoření objektu národního prostředí, který nemá žádné omezující vlastnosti Je to také transparentní národní prostředí. Pokud funkce šablony has_facet a use_facet nemůžou najít požadovanou omezující vlastnost v transparentním národním prostředí, obraťte se nejprve na globální národní prostředí a pokud je to transparentní, klasické národní prostředí. Takže můžete napsat:
cout.imbue(locale::empty());
Následné vložení cout
jsou meditovány aktuálním stavem globálního národního prostředí. Lze dokonce psát:
locale loc(locale::empty(),
locale::classic(),
locale::numeric);
cout.imbue(loc);
Pravidla číselného formátování pro následné vložení zůstanou cout
stejná jako v národním prostředí jazyka C, i když globální národní prostředí poskytuje měnící se pravidla pro vkládání kalendářních dat a peněžních částek.
Konstruktory
Konstruktor | Popis |
---|---|
locale | Vytvoří národní prostředí nebo kopii národního prostředí či kopii národního prostředí, kde byla omezující vlastnost nebo kategorie nahrazena omezující vlastností nebo kategorií z jiného národního prostředí. |
Typedefs
Název typu | Popis |
---|---|
kategorie | Typ integer, který poskytuje hodnoty bitové masky pro skupiny standardních omezujících vlastností. |
Členské funkce
Členová funkce | Popis |
---|---|
kombinovat | Vloží omezující vlastnost ze zadaného národního prostředí do cílového národního prostředí. |
Jméno | Vrátí název uloženého národního prostředí. |
Statické funkce
Název | Popis |
---|---|
klasický | Statická funkce členu vrátí objekt národního prostředí, který představuje klasické národní prostředí jazyka C. |
globální | Obnoví výchozí národní prostředí pro program. |
Operátory
Operátor | Popis |
---|---|
operator= | Přiřadí národní prostředí. |
operator!= | Testuje dvě národní prostředí na nerovnost. |
operator( ) | Porovná dva basic_string objekty. |
operator== | Testuje dvě národní prostředí na rovnost. |
Třídy
Třída | Popis |
---|---|
facet | Třída, která slouží jako základní třída pro všechny omezující vlastnosti národního prostředí. |
id |
Třída členu poskytuje jedinečnou identifikaci omezující podmínky, která se používá jako index při vyhledávání omezujících vlastností v národním prostředí. |
Požadavky
Záhlaví:<národní prostředí>
Obor názvů: std
národní prostředí::category
Typ integer, který poskytuje hodnoty bitové masky pro skupiny standardních omezujících vlastností.
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;
Poznámky
Typ je synonymem pro int
typ, který může představovat skupinu jedinečných prvků typu bitmask místního pro národní prostředí třídy nebo lze použít k reprezentaci některé z odpovídajících kategorií národního prostředí jazyka C. Prvky jsou:
collate
odpovídající LC_COLLATE kategorie Cctype
odpovídající LC_CTYPE kategorie Cmonetary
odpovídající LC_MONETARY kategorie Cnumeric
odpovídající LC_NUMERIC kategorie Ctime
odpovídající LC_TIME kategorie Cmessages
odpovídající kategorii POSIX LC_MESSAGES
Dvě užitečnější hodnoty jsou:
none
, odpovídající žádné z kategorií jazyka Call
, odpovídající sjednocení C všech kategorií LC_ALL
Můžete reprezentovat libovolnou skupinu kategorií pomocí bitové nebo s těmito konstantami, jako v monetary | time
.
národní prostředí::classic
Statická funkce členu vrátí objekt národního prostředí, který představuje klasické národní prostředí jazyka C.
static const locale& classic();
Návratová hodnota
Odkaz na národní prostředí jazyka C.
Poznámky
Klasické národní prostředí jazyka C je národní prostředí ASCII v USA v rámci standardní knihovny C. Jedná se o národní prostředí, které se implicitně používá v programech, které nejsou mezinárodní.
Příklad
// 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.
národní prostředí::combine
Vloží omezující vlastnost ze zadaného národního prostředí do cílového národního prostředí.
template <class Facet>
locale combine(const locale& source_locale) const;
Parametry
source_locale
Národní prostředí obsahující omezující vlastnost, která se má vložit do cílového národního prostředí.
Návratová hodnota
Členová funkce vrátí objekt národního prostředí, který nahradí omezující vlastnost nebo ji přidá do *this
omezující vlastnosti Facet
uvedené v source_locale.
Příklad
// 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 – třída
Třída, která slouží jako základní třída pro všechny omezující vlastnosti národního prostředí.
class facet {
protected:
explicit facet(size_t references = 0);
virtual ~facet();
private:
facet(const facet&) // not defined
void operator=(const facet&) // not defined
};
Poznámky
Objekt třídy facet
nelze kopírovat ani přiřazovat . Lze sestavit a zničit objekty odvozené z třídy locale::facet
, ale ne objekty základní třídy správné. Obvykle vytváříte objekt _Myfac
odvozený z facet
při vytváření , locale
jako v locale loc(locale::classic(), new _Myfac);
V takových případech by konstruktor základní třídy facet
měl mít argument nulové odkazy . Pokud už objekt nepotřebujete, odstraní se. Argument nenulových odkazů zadejte pouze ve výjimečných případech, kdy převezmete odpovědnost za životnost objektu.
národní prostředí::global
Obnoví výchozí národní prostředí pro program. Toto volání má vliv na globální národní prostředí pro C i C++.
static locale global(const locale& new_default_locale);
Parametry
new_default_locale
Národní prostředí, které má program použít jako výchozí národní prostředí.
Návratová hodnota
Předchozí národní prostředí před resetováním výchozího národního prostředí.
Poznámky
Při spuštění programu je globální národní prostředí stejné jako klasické národní prostředí. Funkce global()
volá setlocale( LC_ALL, loc.name. c_str())
, aby vytvořila odpovídající národní prostředí v knihovně standardního jazyka C.
Příklad
// 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 – třída
Třída členu poskytuje jedinečnou identifikaci omezující podmínky, která se používá jako index při vyhledávání omezujících vlastností v národním prostředí.
class id
{
protected: id();
private: id(const id&)
void operator=(const id&) // not defined
};
Poznámky
Třída členu popisuje statický členský objekt vyžadovaný jednotlivými jedinečnými omezujícími vlastnostmi národního prostředí. Objekt třídy id
nelze kopírovat ani přiřazovat .
národní prostředí::locale
Vytvoří národní prostředí nebo kopii národního prostředí či kopii národního prostředí, kde byla omezující vlastnost nebo kategorie nahrazena omezující vlastností nebo kategorií z jiného národního prostředí. Obsahuje také 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();
Parametry
locale_name
Název národního prostředí.
from_locale
Národní prostředí, které se má zkopírovat při vytváření nového národního prostředí.
Další
Národní prostředí, ze kterého chcete vybrat kategorii.
new_category
Kategorie, která se má nahradit konstruovaným národním prostředím.
new_facet
Omezující vlastnost, která se má nahradit do vytvořeného národního prostředí.
Poznámky
První konstruktor inicializuje objekt tak, aby odpovídal globálnímu národnímu prostředí. Druhé a třetí konstruktory inicializují všechny kategorie národního prostředí tak, aby byly konzistentní s názvem národního prostředí locale_name. Zbývající konstruktory zkopírují from_locale s výjimkou:
locale(const locale& from_locale, const locale& Other, category new_category);
nahrazuje z jiné omezující vlastnosti odpovídající kategorii C, pro kterou je C & new_category nenulové.
locale(const locale& from_locale, const char* locale_name, category new_category);
locale(const locale& from_locale, const string& locale_name, category new_category);
nahrazuje z locale(locale_name, all)
těchto omezujících vlastnost odpovídajících kategorii replace_category , pro kterou replace_category & new_category
je nenulová.
template<class Facet> locale(const locale& from_locale, Facet* new_facet);
nahradí from_locale omezující vlastnosti new_facet ,pokud new_facet není ukazatelem null.
Pokud je název národního prostředí locale_name ukazatel null nebo je neplatný, funkce vyvolá runtime_error.
Příklad
// 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
Vrátí název uloženého národního prostředí.
string name() const;
Návratová hodnota
Řetězec s názvem národního prostředí.
Příklad
// 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=
Přiřadí národní prostředí.
const locale& operator=(const locale& other) noexcept;
locale::operator!=
Testuje dvě národní prostředí na nerovnost.
bool operator!=(const locale& right) const;
Parametry
Vpravo
Jedno z národních prostředí, které se má testovat na nerovnost.
Návratová hodnota
Logická hodnota, která je true
v případě, že národní prostředí nejsou kopiemi stejného národního prostředí. Je to false
v případě, že národní prostředí jsou kopie stejného národního prostředí.
Poznámky
Dvě národní prostředí jsou stejná, pokud jsou stejná národní prostředí, pokud je jedna kopií druhého národního prostředí nebo pokud mají stejné názvy.
Příklad
// 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()
Porovná dva basic_string
objekty podle lexikografických srovnávacích pravidel definovaných omezujícími std::collate<charT>
vlastnostmi tohoto národního prostředí.
template <class CharType, class Traits, class Allocator>
bool operator()(
const basic_string<CharType, Traits, Allocator>& left,
const basic_string<CharType, Traits, Allocator>& right) const;
Parametry
Vlevo
První řetězec určený k porovnání
Vpravo
Druhý řetězec určený k porovnání
Návratová hodnota
true
pokud je vlevo lexicicky menší než vpravo, jinakfalse
.
Poznámky
Členová funkce efektivně provede:
const collate<CharType>& fac = use_fac<collate<CharType>>(*this);
return (fac.compare(left.begin(), left.end(), right.begin(), right.end()) < 0);
Znamená to, že jako objekt funkce můžete použít objekt národního prostředí.
Příklad
// 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==
Testuje dvě národní prostředí na rovnost.
bool operator==(const locale& right) const;
Parametry
Vpravo
Jedno z národních prostředí, která mají být testována na rovnost.
Návratová hodnota
Logická hodnota, která je true
v případě, že národní prostředí jsou kopie stejného národního prostředí. Je to false
v případě, že národní prostředí nejsou kopiemi stejného národního prostředí.
Poznámky
Dvě národní prostředí jsou stejná, pokud jsou stejná národní prostředí, pokud je jedna kopií druhého národního prostředí nebo pokud mají stejné názvy.
Příklad
// 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.
Viz také
<locale>
Znakové stránky
Názvy národních prostředí, jazyky a řetězce země/oblasti
Bezpečný přístup z více vláken ve standardní knihovně C++