std::locale
| Определено в заголовочном файле <locale>
|
||
class locale; |
||
Объект класса std::locale является индексным множеством указателей (со счётчиками ссылок) на фасеты. С каждым потоковым объектом библиотеки ввода / вывода C++ связана локаль std::locale, которая использует свои фасеты для разбора и форматирования всех данных. Кроме того, объект локали связывается с каждым объектом basic_regex. Также объекты локалей могут использоваться в качестве предикатов, выполняющих сравнение строк внутри стандартных контейнеров и алгоритмов; к ним возможен прямой доступ для получения или изменения хранимых в них фасетов. Каждая локаль, конструируемая в программе на C++, содержит как минимум следующие стандартные фасеты, однако программа может определять дополнительные специализации существующих фасетов или даже полностью новые фасеты и добавлять их в любой существующий объект локали.
| Поддерживаемые фасеты | |
|---|---|
std::collate<char>
|
std::collate<wchar_t>
|
std::ctype<char>
|
std::ctype<wchar_t>
|
std::codecvt<char,char,mbstate_t>std::codecvt<char16_t,char,mbstate_t>
|
std::codecvt<char32_t,char,mbstate_t>std::codecvt<wchar_t,char,mbstate_t>
|
std::moneypunct<char> std::moneypunct<char,true>
|
std::moneypunct<wchar_t>std::moneypunct<wchar_t,true>
|
std::money_get<char>
|
std::money_get<wchar_t>
|
std::money_put<char>
|
std::money_put<wchar_t>
|
std::numpunct<char>
|
std::numpunct<wchar_t>
|
std::num_get<char>
|
std::num_get<wchar_t>
|
std::num_put<char>
|
std::num_put<wchar_t>
|
std::time_get<char>
|
std::time_get<wchar_t>
|
std::time_put<char>
|
std::time_put<wchar_t>
|
std::messages<char>
|
std::messages<wchar_t>
|
Типы-члены
| тип индекса фасета: каждый класс фасета должен объявлять или наследовать публичный статический член этого типа (класс) | |
| базовый класс для всех категорий фасетов: каждый фасет любой категории наследуется от этого типа (класс) | |
category |
int (определение типа) |
Объекты-члены
none [static] |
нулевое значение типа category, указывающее, что фасет не относится ни к какой категории (public static константа-элемент) |
collate [static] |
битовая маска типа category, указывающая, что фасет относится к категории сравнения строк (public static константа-элемент) |
ctype [static] |
битовая маска типа category, указывающая, что фасет относится к категории ctype (public static константа-элемент) |
monetary [static] |
битовая маска типа category, указывающая, что фасет относится к категории денежных единиц (public static константа-элемент) |
numeric [static] |
битовая маска типа category, указывающая, что фасет относится к категории числовых единиц (public static константа-элемент) |
time [static] |
битовая маска типа category, указывающая, что фасет относится к категории единиц даты / времени (public static константа-элемент) |
messages [static] |
битовая маска типа category, указывающая, что фасет относится к категории сообщений (public static константа-элемент) |
all [static] |
collate | ctype | monetary | numeric | time | messages (public static константа-элемент) |
Функции-члены
| создаёт новую локаль (public функция-элемент) | |
| разрушает локаль и фасеты, чей счётчик ссылок достиг нуля (public функция-элемент) | |
| заменяет локаль (public функция-элемент) | |
| конструирует локаль из идентификатора фасета времени компиляции, скопированном из другой локали (public функция-элемент) | |
| возвращает имя локали или "*", если локаль не имеет имени (public функция-элемент) | |
(удалено в C++20) |
сравнение на равенство между объектами локали (public функция-элемент) |
| лексикографически сравнивает две строки, используя фасет сопоставления этой локали (public функция-элемент) | |
[static] |
изменяет глобальную локаль (public static функция-элемент) |
[static] |
получает ссылку на локаль "C" (public static функция-элемент) |
Пример
Демонстрирует типичный (кросс-платформенный) пролог локале-зависимой программы
#include <iostream>
#include <locale>
int main()
{
std::wcout << "Предпочитаемые пользователем настройки локали: " << std::locale("").name().c_str() << '\n';
// при старте программы глобальная локаль установлена в локаль "C"
std::wcout << 1000.01 << '\n';
// заменяем глобальную локаль C++ (вместе с локалью C) на предпочитаемую пользователем локаль
std::locale::global(std::locale("") );
// используем новую глобальную локаль для последующего вывода широких символов
std::wcout.imbue(std::locale());
// снова выводим некоторое число
std::wcout << 1000.01 << '\n';
}
Вывод:
Предпочитаемые пользователем настройки локали: en_US.UTF8
1000.01
1,000.01
Смотрите также
| получает фасет из локали (шаблон функции) | |
| проверяет, реализует ли локаль определённый фасет (шаблон функции) | |
| устанавливает языковой стандарт (public функция-элемент std::ios_base)
| |
| возвращает текущий языковой стандарт (public функция-элемент std::ios_base)
|