Namespaces
Variants

C++ named requirements: BasicFormatter (since C++20)

From cppreference.net
C++ named requirements

BasicFormatter 는 주어진 서식 인수 타입과 문자 타입에 대한 서식 작업을 추상화하는 타입입니다. std::formatter 의 특수화는 BasicFormatter 의 요구 사항을 충족해야 합니다.

BasicFormatter 는 const 및 non-const 인수 모두를 포맷할 수 있을 경우 Formatter 입니다.

요구사항

타입은 다음을 만족하는 경우 BasicFormatter 를 만족합니다: 이는 준정규(semiregular)임을 의미하며, 다음을 만족함을 뜻합니다:

그리고, 다음 유형과 값이 주어졌을 때 아래 표에 표시된 표현식들은 유효하며 표시된 의미를 갖습니다:

유형 정의
CharT 문자 유형
Arg 포맷팅 인자 유형
Formatter Arg CharT 유형에 대한 Formatter 유형
OutputIt LegacyOutputIterator 유형
ParseCtx std:: basic_format_parse_context < CharT >
FmtCtx std:: basic_format_context < OutputIt, CharT >
정의
f (const 한정 가능성이 있는) Formatter 유형의 값
g Formatter 유형의 값
arg Arg 유형의 lvalue
t (const 한정 가능성이 있는) Arg 로 변환 가능한 유형의 값
parse_ctx 다음 모든 조건을 만족하는 ParseCtx 유형의 lvalue:
  • parse_ctx. begin ( ) 가 포맷 문자열 내에서 포맷 중인 치환 필드의 format-spec 시작 부분을 가리킴
  • format-spec 이 존재하지 않거나 비어 있는 경우, parse_ctx. begin ( ) == parse_ctx. end ( ) 이거나 * parse_ctx. begin ( ) == '}'
fmt_ctx FmtCtx 유형의 lvalue
표현식 반환 타입 의미론
g. parse ( parse_ctx ) ParseCtx::iterator
  • 범위 [ parse_ctx. begin ( ) , parse_ctx. end ( ) ) 내에서 format-spec Arg 타입에 대해 첫 번째 매치되지 않는 문자까지 파싱합니다.
  • 전체 범위가 파싱되거나 매치되지 않는 문자가 } 가 아닌 경우 std::format_error 를 발생시킵니다. [note 1]
  • 파싱된 형식 지정자를 g 에 저장하고 파싱된 범위의 끝 반복자를 반환합니다.
f. format ( arg, fmt_ctx ) FmtCtx::iterator
  • arg f 에 저장된 지정자에 따라 형식화하고, 출력을 fmt_ctx. out ( ) 에 기록하며 출력 범위의 끝 반복자를 반환합니다.
  • 출력은 다음에만 의존해야 합니다:
    • arg ,
    • fmt_ctx. locale ( ) ,
    • 마지막으로 호출된 f. parse ( parse_ctx ) 의 범위 [ parse_ctx. begin ( ) , parse_ctx. end ( ) ) , 그리고
    • fmt_ctx. arg ( n ) ( n std::size_t 타입의 임의의 값).
  1. 이를 통해 포매터가 의미 있는 오류 메시지를 출력할 수 있습니다.

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
LWG 3892 C++20 format-spec 이 존재하지 않을 경우 pc. begin ( ) 의 값이 불명확했음 명확하게 규정됨