Namespaces
Variants

std:: num_put

From cppreference.net
헤더 파일에 정의됨 <locale>
template <

class CharT,
class OutputIt = std:: ostreambuf_iterator < CharT >

> class num_put ;

클래스 std::num_put 은 숫자 값을 문자열로 포맷팅하는 규칙을 캡슐화합니다. 구체적으로, bool , long , unsigned long , long long , unsigned long long (C++11 이후) , double , long double , void * , 그리고 이들로 암시적으로 변환 가능한 모든 타입들(예: int 또는 float )이 지원됩니다. 표준 포맷팅 출력 연산자들(예: cout << n ; )은 숫자의 텍스트 표현을 생성하기 위해 I/O 스트림의 로캘의 std::num_put 패싯을 사용합니다.

cpp/locale/locale/facet std-num put-inheritance.svg

상속 다이어그램

만약 std::num_put 특수화가 표준 라이브러리에서 제공된다는 보장이 없는 경우(아래 참조), 해당 put() do_put() 함수의 동작은 명시된 대로 보장되지 않습니다.

목차

특수화

표준 라이브러리는 다음과 같은 특수화를 제공함을 보장합니다 (이들은 모든 locale 객체에 의해 구현되어야 하는 요구사항 입니다):

헤더 파일에 정의됨 <locale>
std :: num_put < char > 숫자의 좁은 문자열 표현을 생성함
std :: num_put < wchar_t > 숫자의 넓은 문자열 표현을 생성함

또한, 표준 라이브러리는 다음 타입 요구사항을 충족하는 모든 특수화를 제공하는 것도 보장됩니다:

중첩 타입

유형 정의
char_type CharT
iter_type OutputIt

데이터 멤버

멤버 설명
std::locale::id id [static] facet 의 식별자

멤버 함수

새로운 num_put 패싯을 생성합니다
(public member function)
do_put 을 호출합니다
(public member function)

보호된 멤버 함수

num_put 패싯을 파괴함
(protected member function)
[virtual]
숫자를 형식화하고 출력 스트림에 기록함
(virtual protected member function)

예제

#include <iostream>
#include <iterator>
#include <locale>
#include <string>
int main()
{
    double n = 1234567.89;
    std::cout.imbue(std::locale("de_DE.UTF-8"));
    std::cout << "Direct conversion to string:\n"
              << std::to_string(n) << '\n'
              << "Output using a german locale:\n"
              << std::fixed << n << '\n'
              << "Output using an american locale:\n";
    // use the facet directly
    std::cout.imbue(std::locale("en_US.UTF-8"));
    auto& f = std::use_facet<std::num_put<char>>(std::cout.getloc());
    f.put(std::ostreambuf_iterator<char>(std::cout), std::cout, ' ', n);
    std::cout << '\n';
}

가능한 출력:

Direct conversion to string:
1234567.890000
Output using a german locale:
1.234.567,890000
Output using an american locale:
1,234,567.890000

결함 보고서

다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 수정된 동작
LWG 427 C++98 num_put 은 모든 CharT 를 수용하도록 보장됨
(iostream 구성 요소가 인스턴스화될 수 있는
모든 문자 요구사항을 충족하는 경우)
char ,
wchar_t 및 다른 구현 정의
문자 타입만 수용하도록 보장
LWG 2392 C++98 문자 타입 CharT 만이
num_put 에 의해 수용될 수 있음이 보장됨
구현 정의 문자 컨테이너 타입도
수용할 수 있도록 보장 가능

참고 항목

숫자 구두점 규칙을 정의함
(클래스 템플릿)
입력 문자 시퀀스에서 숫자 값을 파싱함
(클래스 템플릿)
(C++11)
정수 또는 부동 소수점 값을 string 으로 변환함
(함수)
(C++11)
정수 또는 부동 소수점 값을 wstring 으로 변환함
(함수)