num_get 클래스

형식 CharType 시퀀스를 숫자 값으로 변환하는 것을 제어하는 로캘 패싯 역할을 할 수 있는 개체를 설명하는 클래스 템플릿입니다.

구문

template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class num_get : public locale::facet;

매개 변수

Chartype
로캘의 문자를 인코딩하기 위해 프로그램 내 사용하는 형식입니다.

InputIterator
숫자 get 함수가 입력을 읽어올 반복기의 형식입니다.

설명

모든 로캘 패싯과 마찬가지로, 고정 개체 ID에는 초기값 0이 저장되어 있습니다. 저장된 값에 액세스를 처음 시도하면 id에 고유한 양수 값이 저장됩니다.

생성자

생성자 Description
num_get 시퀀스에서 숫자 값을 추출하는 데 사용되는 num_get 형식의 개체에 대한 생성자입니다.

Typedef

형식 이름 설명
char_type 로캘에서 사용하는 문자를 설명하기 위해 사용하는 형식입니다.
iter_type 입력 반복기에 대해 설명하는 형식입니다.

멤버 함수

멤버 함수 설명
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입니다.

상태
오류 시 failbit가 추가되는 상태(ios_base::iostate 참조)입니다.

val
읽은 값입니다.

Return Value

값을 읽은 후의 반복기입니다.

설명

첫 번째 보호된 가상 구성원 함수는 다음 코드와 같습니다.

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::failbitstate. 그리고 유효한 정수 입력 필드의 접두사를 벗어난 범위에 있는 첫 번째 요소를 지정하는 반복기를 반환합니다. 두 경우 모두 반환 값이 last와 같으면 함수는 state에서 ios_base::eofbit를 설정합니다.

정수 입력 필드는 파일 내 일련의 char 요소 일치 및 변환을 위해 scan 함수가 사용하는 것과 같은 규칙을 통해 변환됩니다. (이러한 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입니다.

정수 입력 필드의 형식은 locale facetfac에 의해 추가로 결정됩니다. 이 항목은 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라는 점을 제외하면 여덟 번째 함수와 동일하게 동작합니다.

10번째 가상 보호 멤버 함수:

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의 경우)과 일치해야 합니다.

예시

do_get에 의해 가상 구성원 함수가 호출되는 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입니다.

상태
오류 시 failbit가 추가되는 상태(ios_base::iostate 참조)입니다.

val
읽은 값입니다.

Return Value

값을 읽은 후의 반복기입니다.

설명

모든 멤버 함수는 do_get( first, last, iosbase, state, val) 반환합니다.

첫 번째 보호된 가상 구성원 함수는 비어 있지 않은 완전한 정수 입력 필드를 인식할 때까지 시퀀스 [ first, last)에서 처음 시작되는 순차 요소 일치를 시도합니다. 성공하면 이 필드를 해당 값으로 형식 long 으로 변환하고 결과를 val저장합니다. 이 함수는 숫자 입력 필드를 벗어난 범위에 있는 첫 번째 요소를 지정하는 반복기를 반환합니다. 그렇지 않으면 함수는 val에 아무것도 저장하지 않으며 상태를 설정합니다ios_base::failbit. 그리고 유효한 정수 입력 필드의 접두사를 벗어난 범위에 있는 첫 번째 요소를 지정하는 반복기를 반환합니다. 두 경우 모두 반환 값이 마지막 값과 같으면 함수는 상태를 설정합니다 ios_base::eofbit.

정수 입력 필드는 파일 내 일련의 char 요소 일치 및 변환을 위해 scan 함수가 사용하는 것과 같은 규칙을 통해 변환됩니다. 이러한 char 각 요소는 간단한 일대일 매핑을 통해 형식의 CharType 해당 요소에 매핑되는 것으로 간주됩니다. 동일한 스캔 변환 사양은 다음과 같이 결정됩니다.

  • 플래그& ios_base::basefield == ios_base::가 10월이면 iosbase.변환 사양은 .입니다.lo

  • iosbase.flags & ios_base::basefield == ios_base::hex이면 변환 사양은 lx입니다.

  • iosbase.flags & ios_base::basefield == 0이면 변환 사양은 li입니다.

  • 그렇지 않으면 변환 사양은 ld입니다.

정수 입력 필드의 형식은 호출 use_facet getloc())에서 반환된 로numpunct<<Elem>(iosbase.캘 패싯fac에 의해 추가로 결정됩니다. 특별한 사항

  • 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저장합니다.

부울 입력 필드는 두 가지 형식 중 하나를 사용합니다. boolalphafalse경우 iosbase.flags & ios_base::변환된 값은 0(forfalse) 또는 1(fortrue)이어야 한다는 점을 제외하고 정수 입력 필드와 동일합니다. 그렇지 않으면 시퀀스가 falsename(forfalse) 또는 fac.truename(fortrue)과 일치fac.해야 합니다.

예시

// 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);

매개 변수

심판
개체에 대한 메모리 관리의 유형을 지정하는 데 사용하는 정수 값입니다.

설명

refs 매개 변수 및 해당 중요도에 사용할 수 있는 값은 다음과 같습니다.

  • 0: 개체를 포함하는 로캘에 의해 개체의 수명이 관리됩니다.

  • 1: 개체의 수명을 수동으로 관리해야 합니다.

  • > 1: 이러한 값은 정의되지 않습니다.

소멸자는 보호되므로 직접적인 예제는 확인할 수 없습니다.

생성자는 패싯을 사용하여 기본 개체 locale::를 초기화합니다(refs).

참고 항목

<로캘>
facet 클래스
C++ 표준 라이브러리의 스레드 보안