std:: num_get
|
헤더에 정의됨
<locale>
|
||
|
template
<
class
CharT,
|
||
클래스
std::num_get
는 숫자 값의 문자열 표현을 파싱하기 위한 규칙을 캡슐화합니다. 구체적으로,
bool
,
unsigned
short
,
unsigned
int
,
long
,
unsigned
long
,
long
long
,
unsigned
long
long
(C++11부터)
,
float
,
double
,
long
double
, 그리고
void
*
타입이 지원됩니다. 표준 형식화 입력 연산자들(예:
cin
>>
n
;
)은 숫자의 텍스트 표현을 파싱하기 위해 I/O 스트림의 로캘의
std::num_get
패싯을 사용합니다.
상속 다이어그램
만약
std::num_get
특수화가 표준 라이브러리에서 제공된다는 보장이 없는 경우(아래 참조), 해당
get()
및
do_get()
함수의 동작은 명세된 대로 보장되지 않습니다.
목차 |
특수화
표준 라이브러리는 다음과 같은 특수화를 제공함을 보장합니다 (이들은 모든 locale 객체에 의해 구현되어야 하는 요구사항 입니다):
|
헤더 파일에 정의됨
<locale>
|
|
| std :: num_get < char > | 좁은 문자열 숫자 파싱을 생성함 |
| std :: num_get < wchar_t > | 넓은 문자열 숫자 파싱을 생성함 |
또한, 표준 라이브러리는 다음 타입 요구사항을 충족하는 모든 특수화를 제공하는 것도 보장됩니다:
-
CharT는 다음 중 하나입니다:- char ,
- wchar_t , 그리고
- 구현에서 정의된 다른 문자 컨테이너 타입 으로, iostream 컴포넌트 가 인스턴스화될 수 있는 문자 요구사항을 충족하는 타입; 그리고
-
InputIt는 LegacyInputIterator 요구사항을 충족해야 합니다.
중첩 타입
| 유형 | 정의 |
char_type
|
CharT
|
iter_type
|
InputIt
|
데이터 멤버
| 멤버 | 설명 |
std::locale::id
id
[static]
|
facet 의 식별자 |
멤버 함수
새로운
num_get
패싯을 생성함
(public member function) |
|
do_get
을 호출함
(public member function) |
보호된 멤버 함수
num_get
패싯을 파괴함
(protected member function) |
|
|
[virtual]
|
입력 스트림에서 숫자를 파싱함
(virtual protected member function) |
예제
#include <iostream> #include <iterator> #include <locale> #include <sstream> #include <string> int main() { std::string de_double = "1.234.567,89"; std::string us_double = "1,234,567.89"; // 스트림을 사용한 파싱 std::istringstream de_in(de_double); de_in.imbue(std::locale("de_DE.UTF-8")); double f1; de_in >> f1; std::istringstream us_in(de_double); us_in.imbue(std::locale("en_US.UTF-8")); double f2; us_in >> f2; std::cout << "Parsing " << de_double << " as double gives " << std::fixed << f1 << " in de_DE locale and " << f2 << " in en_US\n"; // facet 직접 사용 std::istringstream s3(us_double); s3.imbue(std::locale("en_US.UTF-8")); auto& f = std::use_facet<std::num_get<char>>(s3.getloc()); std::istreambuf_iterator<char> beg(s3), end; double f3; std::ios::iostate err; f.get(beg, end, s3, err, f3); std::cout << "parsing " << us_double << " as double using raw en_US facet gives " << f3 << '\n'; }
출력:
Parsing 1.234.567,89 as double gives 1234567.890000 in de_DE locale and 1.234000 in en_US parsing 1,234,567.89 as double using raw en_US facet gives 1234567.890000
결함 보고서
다음 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 수정된 동작 |
|---|---|---|---|
| LWG 427 | C++98 |
num_get
은 모든
CharT
를 수락하도록
보장되었으며, 이는 iostream 구성 요소가 인스턴스화될 수 있는 모든 문자 요구사항을 충족 |
char
,
wchar_t 및 구현 정의 문자 타입만 수락하도록 보장 |
| LWG 2392 | C++98 |
문자 타입
CharT
만이
num_get
에 의해 수락될 수 있음이 보장됨
|
구현 정의 문자 컨테이너 타입
수락을 보장할 수 있음 |
참고 항목
|
숫자 구두점 규칙을 정의함
(클래스 템플릿) |
|
|
숫자 값을 문자 시퀀스로 출력하기 위해 형식화함
(클래스 템플릿) |
|
|
형식화된 데이터를 추출함
(
std::basic_istream<CharT,Traits>
의 public 멤버 함수)
|