Sdílet prostřednictvím


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_objectná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:

  • collateodpovídající LC_COLLATE kategorie C

  • ctypeodpovídající LC_CTYPE kategorie C

  • monetaryodpovídající LC_MONETARY kategorie C

  • numericodpovídající LC_NUMERIC kategorie C

  • timeodpovídající LC_TIME kategorie C

  • messagesodpovídající kategorii POSIX LC_MESSAGES

Dvě užitečnější hodnoty jsou:

  • none, odpovídající žádné z kategorií jazyka C

  • all, 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 facetnelze 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í , localejako 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 idnelze 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, jinak false.

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++