Класс num_get
Шаблон класса, описывающий объект, который может служить аспектом языкового стандарта для управления преобразованиями последовательностей типа CharType
в числовые значения.
Синтаксис
template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class num_get : public locale::facet;
Параметры
CharType
Тип, используемый внутри программы для кодирования символов в языковом стандарте.
InputIterator
Тип итератора, из которого функции получения числовых значений считывают своих входные данные.
Замечания
Как и в случае любого другого аспекта языкового стандарта, начальное сохраненное значение статического идентификатора объекта равно нулю. Первая попытка получить доступ к сохраненному значению сохранит уникальное положительное значение в id.
Конструкторы
Конструктор | Description |
---|---|
num_get | Конструктор для объектов типа num_get , используемых для извлечения числовых значений из последовательностей. |
Определения типов
Введите имя | Description |
---|---|
char_type | Тип, используемый для описания символа, используемого языковым стандартом. |
iter_type | Тип, который описывает итератор ввода. |
Функции элементов
Функция-член | Description |
---|---|
do_get | Виртуальная функция, вызываемая для извлечения числового или логического значения из последовательности символов, представляющей денежное значение. |
get | Извлекает числовое или логическое значение из последовательности символов. |
Требования
Заголовок:<языковой стандарт>
Пространство имен: std
num_get::char_type
Тип, используемый для описания символа, используемого языковым стандартом.
typedef CharType char_type;
Замечания
Тип является синонимом для параметра-шаблона CharType.
num_get::d o_get
Виртуальная функция, вызываемая для извлечения числового или логического значения из последовательности символов, представляющей денежное значение.
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned short& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned int& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
Параметры
first
Начало диапазона символов для чтения числа.
last
Конец диапазона символов для чтения числа.
Iosbase
Ios_base, флаги которого используются для преобразования.
state
Состояние, к которому при сбое добавляется failbit (см. ios_base::iostate).
Val
Прочитанное значение.
Возвращаемое значение
Итератор после чтения значения.
Замечания
Первая виртуальная защищенная функция-член:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
сопоставляет последовательные элементы, начинающиеся сначала в последовательности[first, last)
, пока не распознает полное целочисленное поле ввода. При успешном выполнении это поле преобразуется в эквивалентное значение типа long
и сохраняет результат в val. Она возвращает итератор, обозначающий первый элемент после числового поля ввода. В противном случае функция сохраняет ничего в val и задает ios_base::failbit
в state
. Она возвращает итератор, обозначающий первый элемент после любого префикса допустимого целочисленного поля ввода. В любом случае, если возвращаемое значение равно last
, функция устанавливает ios_base::eofbit
в state
.
Целочисленное поле ввода преобразуется по тем же правилам, которые функции сканирования используют для сопоставления и преобразования ряда элементов char
из файла. (Предполагается, что каждый такой char
элемент сопоставляется с эквивалентным элементом типа Elem
по простому, одно-одному, сопоставлению.) Эквивалентная спецификация преобразования сканирования определяется следующим образом:
Если iosbase.
ios_base::flags() & ios_base::basefield == ios_base::
oct, спецификация преобразования имеет значение lo
.
Если iosbase.flags() & ios_base::basefield == ios_base::
hex, спецификация преобразования имеет значение lx
.
Если iosbase.flags() & ios_base::basefield == 0
, спецификация преобразования имеет значение li
.
В противном случае спецификация преобразования имеет значение ld
.
Формат целочисленного поля ввода определяется дополнительным аспектом языковогоfac
стандарта, возвращаемым вызовом use_facet numpunct<Elem>(iosbase.
ios_base<
::getloc.())
В частности:
fac.
numpunct::grouping()
определяет, как группируются цифры слева от любого десятичного разделителя;
fac.
numpunct::thousands_sep()
определяет последовательность, которая разделяет группы цифр слева от любого десятичного разделителя.
Если в числовом поле ввода нет экземпляров fac.thousands_sep()
, то ограничения группировки не применяются. В противном случае применяются ограничения группировки, накладываемые fac.grouping()
, и разделители удаляются перед выполнением преобразования сканирования.
Четвертая виртуальная защищенная функция-член:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
ведет себя так же, как первая, за исключением того, что она заменяет спецификацию преобразования ld
на lu
. Если он успешно преобразует числовое поле ввода в значение типа unsigned long
и сохраняет это значение в val.
Пятая виртуальная защищенная функция-член:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
ведет себя так же, как первая, за исключением того, что она заменяет спецификацию преобразования ld
на lld
. Если он успешно преобразует числовое поле ввода в значение типа long long
и сохраняет это значение в val.
Шестая виртуальная защищенная функция-член:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
ведет себя так же, как первая, за исключением того, что она заменяет спецификацию преобразования ld
на llu
. Если он успешно преобразует числовое поле ввода в значение типа unsigned long long
и сохраняет это значение в val.
Седьмая виртуальная защищенная функция-член:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
ведет себя так же, как первая, за исключением того, что она пытается сопоставить полное, непустое вещественное поле ввода. fac.
numpunct::decimal_point()
определяет последовательность, которая отделяет цифры целой части от цифр дробной части. Эквивалентный спецификатор преобразования сканирования — lf
.
Восьмая виртуальная защищенная функция-член:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
ведет себя так же, как первая, за исключением того, что она пытается сопоставить полное, непустое вещественное поле ввода. fac.
numpunct::decimal_point()
определяет последовательность, которая отделяет цифры целой части от цифр дробной части. Эквивалентный спецификатор преобразования сканирования — lf
.
Девятая виртуальная защищенная функция-член:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
ведет себя так же, как восьмая, за исключением того, что эквивалентный спецификатор преобразования сканирования — Lf
.
Десятая виртуальная защищенная функция-член:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
ведет себя так же, как первая, за исключением того, что эквивалентный спецификатор преобразования сканирования — p
.
Последняя (одиннадцатая) виртуальная защищенная функция-член:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
ведет себя так же, как первая, за исключением того, что она пытается сопоставить полное, непустое логическое поле ввода. При успешном выполнении он преобразует логическое поле ввода в значение типа bool
и сохраняет это значение в val.
Логическое поле ввода может иметь одну из двух форм. Если iosbase.flags() & ios_base::
boolalpha имеет значение false, поле совпадает с целочисленным полем ввода, за исключением того, что преобразованное значение должно быть 0 (false) или 1 (true). В противном случае последовательность должна соответствовать либо fac.
numpunct::falsename()
(для false), либо fac.
numpunct::truename()
(для true).
Пример
См. пример для get, где виртуальная функция-член вызывается из do_get
.
num_get::get
Извлекает числовое или логическое значение из последовательности символов.
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned short& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned int& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
Параметры
first
Начало диапазона символов для чтения числа.
last
Конец диапазона символов для чтения числа.
Iosbase
Ios_base, флаги которого используются для преобразования.
state
Состояние, к которому при сбое добавляется failbit (см. ios_base::iostate).
Val
Прочитанное значение.
Возвращаемое значение
Итератор после чтения значения.
Замечания
Все функции-члены возвращают do_get( first, last, iosbase, state, val)
.
Первая защищенная виртуальная функция-член пытается сопоставить последовательные элементы, начиная с первого в последовательности [first
, last
), пока не распознает полное, непустое целочисленное поле ввода. При успешном выполнении это поле преобразуется в его эквивалентное значение в качестве типа long
и сохраняет результат в val. Она возвращает итератор, обозначающий первый элемент после числового поля ввода. В противном случае функция сохраняет ничего в val и задает ios_base::failbit
в состоянии. Она возвращает итератор, обозначающий первый элемент после любого префикса допустимого целочисленного поля ввода. В любом случае, если возвращаемое значение равно последнему, функция задает ios_base::eofbit
состояние.
Целочисленное поле ввода преобразуется по тем же правилам, которые функции сканирования используют для сопоставления и преобразования ряда элементов char
из файла. char
Предполагается, что каждый такой элемент сопоставляется с эквивалентным элементом типа CharType
простым сопоставлением "один к одному". Эквивалентная спецификация преобразования сканирования определяется следующим образом:
Если
iosbase.
флаги& ios_base::basefield == ios_base::
окт, спецификация преобразования имеет значениеlo
.Если
iosbase.flags & ios_base::basefield == ios_base::
hex, спецификация преобразования имеет значениеlx
.Если
iosbase.flags & ios_base::basefield == 0
, спецификация преобразования имеет значениеli
.В противном случае спецификация преобразования имеет значение
ld
.
Формат целочисленного поля ввода определяется дополнительным аспектом языкового fac
стандарта, возвращаемым вызовом use_facet<
numpunct
<Elem>(iosbase.
getloc.())
В частности:
fac.
grouping определяет, как группируются цифры слева от любого десятичного разделителя.fac.
thousands_sep определяет последовательность, которая разделяет группы цифр слева от любого десятичного разделителя.
Если в числовом поле ввода нет экземпляров fac.thousands_sep
, то ограничения группировки не применяются. В противном случае все ограничения группирования, введенные fac.grouping
принудительно, и разделители удаляются перед преобразованием сканирования.
Вторая виртуальная защищенная функция-член:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
ведет себя так же, как первая, за исключением того, что она заменяет спецификацию преобразования ld
на lu
. В случае успешного выполнения он преобразует числовое поле ввода в значение типа unsigned long
и сохраняет это значение в val.
Третья виртуальная защищенная функция-член:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
ведет себя так же, как первая, за исключением того, что она пытается сопоставить полное, непустое вещественное поле ввода. fac.
decimal_point определяет последовательность, которая отделяет цифры целой части от цифр дробной части. Эквивалентный спецификатор преобразования сканирования — lf
.
Четвертая виртуальная защищенная функция-член:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
выполняет то же самое третье, за исключением того, что эквивалентный описатель преобразования сканирования .Lf
Пятая виртуальная защищенная функция-член:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
ведет себя так же, как первая, за исключением того, что эквивалентный спецификатор преобразования сканирования — p
.
Шестая виртуальная защищенная функция-член:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
ведет себя так же, как первая, за исключением того, что она пытается сопоставить полное, непустое логическое поле ввода. При успешном выполнении он преобразует логическое поле ввода в значение типа bool
и сохраняет это значение в val.
Логическое поле ввода может иметь одну из двух форм. Если iosbase.flags & ios_base::
логическое значение false
равно, это то же самое, что целочисленное поле ввода, за исключением того, что преобразованное значение должно иметь значение 0 (дляfalse
) или 1 (для).true
В противном случае последовательность должна совпадать со fac.
значением falsename (forfalse
), илиfac.
truename (fortrue
).
Пример
// num_get_get.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
locale loc( "german_germany" );
basic_stringstream<char> psz, psz2;
psz << "-1000,56";
ios_base::iostate st = 0;
long double fVal;
cout << use_facet <numpunct <char> >(loc).thousands_sep( ) << endl;
psz.imbue( loc );
use_facet <num_get <char> >
(loc).get( basic_istream<char>::_Iter( psz.rdbuf( ) ),
basic_istream<char>::_Iter(0), psz, st, fVal );
if ( st & ios_base::failbit )
cout << "money_get( ) FAILED" << endl;
else
cout << "money_get( ) = " << fVal << endl;
}
num_get::iter_type
Тип, который описывает итератор ввода.
typedef InputIterator iter_type;
Замечания
Этот тип является синонимом для параметра шаблона InputIterator
.
num_get::num_get
Конструктор для объектов типа num_get
, используемых для извлечения числовых значений из последовательностей.
explicit num_get(size_t refs = 0);
Параметры
Ссылочные ссылки
Целочисленное значение, используемое для указания типа управления памятью для объекта.
Замечания
Возможные значения параметра ссылок и их значение:
0: время существования объекта управляется языковыми стандартами, которые его содержат.
1: время существования объекта должно управляться вручную.
> 1. Эти значения не определены.
Прямые примеры привести нельзя, так как деструктор защищен.
Конструктор инициализирует базовый объект с аспектомlocale::
(refs)
.
См. также
<локаль>
Класс facet
Потокобезопасность в стандартной библиотеке C++