std::numpunct
Определено в заголовке <locale> | ||
|---|---|---|
template< class CharT > class numpunct; |
Фасет std::numpunct описывает предпочтения форматирования чисел. Операции ввода/вывода потоков используют std::numpunct через std::num_get и std::num_put для анализа числового ввода и форматирования числового вывода.
Числа, которые поддерживаются std::numpunct, имеют формат, описанный ниже. Здесь digit представляет собой разделитель, указанный значением аргумента fmtflags, thousands-sep и decimal-point являются результатами функций thousands_sep() и decimal_point() соответственно. Формат целых значений следующий:
integer ::= [sign] units sign ::= plusminus plusminus ::= '+' | '-' units ::= digits [thousands-sep units] digits ::= digit [digits]
Количество цифр между thousand-sep (максимальный размер digits) задается результатом grouping().
Формат чисел с плавающей точкой следующий:
floatval ::= [sign] units [decimal-point [digits]] [e [sign] digits] |
[sign] decimal-point digits [e [sign] digits]
e ::= 'e' | 'E'Схема наследования
Специализации
Стандартная библиотека гарантирует предоставление следующих специализаций (они должны быть реализованы любым объектом локализации):
Определено в заголовке <locale> |
|
|---|---|
| std::numpunct<char> | Предоставляет эквиваленты предпочтений локали "C" |
| std::numpunct<wchar_t> | Предоставляет эквиваленты предпочтений локали "C" для символов расширенного набора |
Типы членов
| Тип члена | Определение |
|---|---|
char_type | CharT |
string_type | std::basic_string<CharT> |
Члены-функции
создает новый фасет numpunct (публичная функция-член) |
|
удаляет фасет numpunct (защищенная функция-член) |
|
вызывает do_decimal_point (публичная функция-член) |
|
вызывает do_thousands_sep (публичная функция-член) |
|
вызывает do_grouping (публичная функция-член) |
|
вызывает do_truename или do_falsename (публичная функция-член) |
|
Защищенные члены-функции
|
[virtual] | предоставляет символ для использования в качестве десятичного разделителя (виртуальная защищенная функция-член) |
|
[virtual] | предоставляет символ для использования в качестве разделителя тысяч (виртуальная защищенная функция-член) |
|
[virtual] | предоставляет количество цифр между каждой парой разделителей тысяч (виртуальная защищенная функция-член) |
|
[virtual] | предоставляет строку для использования в качестве имени булевых значений true и false (виртуальная защищенная функция-член) |
Объекты-члены
| static std::locale::id id | id локали (публичный объект-член) |
Пример
В следующем примере изменяются строковые представления true и false:
#include <iostream>
#include <locale>
struct french_bool : std::numpunct<char>
{
string_type do_truename() const override { return "vrai"; }
string_type do_falsename() const override { return "faux"; }
};
int main()
{
std::cout << "default locale: "
<< std::boolalpha << true << ", " << false << '\n';
std::cout.imbue(std::locale(std::cout.getloc(), new french_bool));
std::cout << "locale with modified numpunct: "
<< std::boolalpha << true << ", " << false << '\n';
}Вывод:
default locale: true, false locale with modified numpunct: vrai, faux
Отчеты об ошибках
Следующие отчеты об ошибках, меняющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение при публикации | Правильное поведение |
|---|---|---|---|
| LWG 338 | C++98 | токен sign допускал необязательный пробел после + или - | пробел удален |
См. также
| создает фасет numpunct для заданной локали (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/locale/numpunct