format_basic_format_parse_context

format_basic_format_parse_context (기본 형식 파싱 컨텍스트)

basic_format_parse_context는 형식 문자열 파싱 상태에 접근할 수 있게 해 주는 클래스 템플릿이에요. 이 컨텍스트는 파싱 중인 형식 문자열 범위와 자동 인덱싱을 위한 인자 카운터를 포함해요. Formatter가 형식 지정을 파싱할 때 std::basic_format_parse_context 인스턴스가 전달된답니다.

출처: cppreference

본문

형식 문자열 파싱 상태에 대한 접근을 제공해요. 이 상태는 파싱 중인 형식 문자열 범위와 자동 인덱싱을 위한 인자 카운터로 구성돼요.

std::basic_format_parse_context 인스턴스는 형식 지정을 파싱할 때 Formatter에 전달돼요.

std::basic_format_parse_context의 명시적 또는 부분 특수화를 선언하는 프로그램은 진단이 필요 없는 잘못된 형식(ill-formed)이에요.

일반적인 문자 타입에 대한 몇 가지 typedef가 제공돼요:

헤더에 정의됨
Type
std::format_parse_context
std::wformat_parse_context

멤버 타입 (Member types)

Type Definition
char_type CharT
iterator std :: basic_string_view < CharT >:: const_iterator
const_iterator std :: basic_string_view < CharT >:: const_iterator

멤버 함수 (Member functions)

(constructor) 형식 문자열과 인자 개수로 std::basic_format_parse_context 인스턴스를 생성해요 (public member function)
operator= [deleted] std::basic_format_parse_context는 복사할 수 없어요 (public member function)
begin 형식 문자열 범위의 시작을 가리키는 반복자를 반환해요 (public member function)
end 형식 문자열 범위의 끝을 가리키는 반복자를 반환해요 (public member function)
advance_to begin 반복자를 주어진 위치로 전진시켜요 (public member function)
next_arg_id 자동 인덱싱 모드로 전환하고, 다음 인자 인덱스를 반환해요 (public member function)
check_arg_id 수동 인덱싱 모드로 전환하고, 주어진 인자 인덱스가 범위 안에 있는지 확인해요 (public member function)
check_dynamic_spec (C++26) 주어진 인자 인덱스에 해당하는 형식 인자의 타입이 주어진 타입 템플릿 인자들 중 하나인지 확인해요 (public member function)
check_dynamic_spec_integral (C++26) 주어진 인자 인덱스에 해당하는 형식 인자의 타입이 정수 타입인지 확인해요 (public member function)
check_dynamic_spec_string (C++26) 주어진 인자 인덱스에 해당하는 형식 인자의 타입이 문자열 타입인지 확인해요 (public member function)

std::basic_format_parse_context:: basic_format_parse_context

constexpr explicit basic_format_parse_context ( std :: basic_string_view < CharT > fmt , std :: size_t num_args = 0 ) noexcept ; (1) (until C++26)
constexpr explicit basic_format_parse_context ( std :: basic_string_view < CharT > fmt ) noexcept ; (since C++26)
basic_format_parse_context ( const basic_format_parse_context & ) = delete ; (2)

이 생성자로 초기화된 std::basic_format_parse_context 인스턴스에 대해 next_arg_id, check_arg_id, 또는 check_dynamic_spec를 호출하는 것은 핵심 상수 표현식이 아니에요. (since C++26)

std::basic_format_parse_context:: begin

constexpr const_iterator begin () const noexcept ;

형식 문자열 범위의 시작을 가리키는 반복자를 반환해요.

std::basic_format_parse_context:: end

constexpr const_iterator end () const noexcept ;

형식 문자열 범위의 끝을 가리키는 반복자를 반환해요.

std::basic_format_parse_context:: advance_to

constexpr void advance_to ( const_iterator it );

형식 문자열 범위의 시작을 it로 설정해요. advance_to() 호출 후, 이후 begin() 호출은 it의 복사본을 반환해요.

end()가 it에서 도달 가능하지 않으면 동작은 정의되지 않아요.

std::basic_format_parse_context:: next_arg_id

constexpr std :: size_t next_arg_id ();

자동 인자 인덱싱 모드로 전환하고, 0부터 시작하는 다음 인자 인덱스를 반환해요.

*this가 이미 수동 인자 인덱싱 모드라면 std::format_error를 던져요.

다음 인자 인덱스가 생성자에 제공된 num_args보다 크거나 같으면, 해당 호출은 핵심 상수 표현식이 아니에요.

std::basic_format_parse_context:: check_arg_id

constexpr void check_arg_id ( std :: size_t id );

수동 인자 인덱싱 모드로 전환해요.

*this가 이미 자동 인자 인덱싱 모드라면 std::format_error를 던져요.

id가 생성자에 제공된 num_args보다 크거나 같으면, 해당 호출은 핵심 상수 표현식이 아니에요.

std::basic_format_parse_context:: check_dynamic_spec

template < class ... Ts > constexpr void check_dynamic_spec ( std :: size_t id ) noexcept ; (since C++26)

id가 생성자에 제공된 num_args보다 크거나 같거나, 해당 형식 인자의 타입(std::basic_format_arg로 변환한 후)이 Ts...의 타입 중 하나가 아니면, 해당 호출은 핵심 상수 표현식이 아니에요. check_dynamic_spec 호출은 런타임에 아무 효과가 없어요.

프로그램은 sizeof...(Ts) >= 1 이고, Ts...의 타입들이 모두 유일하며, 각 타입이 bool, char_type, int, unsigned int, long long int, unsigned long long int, float, double, long double, const char_type*, std::basic_string_view<char_type>, 또는 const void* 중 하나가 아니면 잘못된 형식(ill-formed)이에요.

std::basic_format_parse_context:: check_dynamic_spec_integral

constexpr void check_dynamic_spec_integral ( std :: size_t id ) noexcept ; (since C++26)

check_dynamic_spec<int, unsigned int, long long int, unsigned long long int>(id)를 호출하는 것과 동일해요. check_dynamic_spec_integral 호출은 런타임에 아무 효과가 없어요.

std::basic_format_parse_context:: check_dynamic_spec_string

constexpr void check_dynamic_spec_string ( std :: size_t id ) noexcept ; (since C++26)

check_dynamic_spec<const char_type*, std::basic_string_view<char_type>>(id)를 호출하는 것과 동일해요. check_dynamic_spec_string 호출은 런타임에 아무 효과가 없어요.

예제 (Example)

이 섹션은 불완전해요. 이유: 예제 없음

결함 보고서 (Defect reports)

다음 동작 변경 결함 보고서는 이전에 게시된 C++ 표준에 소급 적용되었어요.

DR Applied to Behavior as published Correct behavior
LWG 3825 C++20 check_arg_id에는 컴파일 타임 인자 id 검사가 있었지만, next_arg_id에는 없었음 추가됨
LWG 3975 C++20 basic_format_parse_context의 사용자 특수화가 허용되었음 허용되지 않음

더 알아보기 (Learn more)

cppreference