Поделиться через


Класс 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++