std:: range_formatter
|
헤더에 정의됨
<format>
|
||
|
template
<
class
T,
class
CharT
=
char
>
requires
std::
same_as
<
std::
remove_cvref_t
<
T
>
, T
>
&&
std::
formattable
<
T, CharT
>
|
(C++23부터) | |
std::range_formatter
는 범위
std::formatter
특수화를 구현하기 위한 도우미 클래스 템플릿입니다.
목차 |
범위 형식 사양
range-format-spec 의 구문은 다음과 같습니다:
range-fill-and-align
(선택적)
width
(선택적)
n
(선택적)
range-type
(선택적)
range-underlying-spec
(선택적)
|
|||||||||
range-fill-and-align
은
fill-and-align
과 동일한 방식으로 해석되지만,
range-fill-and-align
에서의
fill
은
{
,
}
, 또는
:
이외의 모든 문자입니다.
width 는 표준 형식 너비 명세 에 설명되어 있습니다.
n
옵션은 범위가 여는 괄호와 닫는 괄호 없이 포맷되도록 합니다.
assert(std::format("{}", views::iota(1, 5)) == "[1, 2, 3, 4]"); assert(std::format("{:n}", views::iota(1, 5)) == "1, 2, 3, 4");
range-underlying-spec
내의
format-spec
(문법은
:
format-spec
와 동일함)이 있는 경우, 이는 범위 요소 포매터
std::formatter<T, CharT>
에 의해 해석됩니다.
std::array ints{12, 10, 15, 14}; assert(std::format("{}", ints) == "[12, 10, 15, 14]"); assert(std::format("{::X}", ints) == "[C, A, F, E]"); assert(std::format("{:n:_^4}", ints) == "_12_, _10_, _15_, _14_");
range-type 은 범위의 서식 지정 방식을 변경하며, 특정 옵션들은 특정 인수 유형에서만 유효합니다.
사용 가능한 범위 표현 유형은 다음과 같습니다:
-
m: 여는 괄호가 "{" 이고, 닫는 괄호가 "}" 이며, 구분자가 ", " 이어야 함을 나타냅니다. 또한 각 범위 요소는m이 해당 tuple-type 에 대해 지정된 것처럼 포맷되어야 합니다( tuple-format-spec 참조).
-
-
m이 range-type 으로 선택된 경우,T가 다음 중 하나의 특수화(specialization)가 아니라면 프로그램은 ill-formed입니다:
-
- std::pair , 또는
- std::tuple 이며 std:: tuple_size_v < T > == 2 가 true 인 경우.
-
std::array char_pairs { std::pair{'A', 5}, std::pair{'B', 10}, std::pair{'C', 12} }; assert(std::format("{}", char_pairs) == "[('A', 5), ('B', 10), ('C', 12)]"); assert(std::format("{:m}", char_pairs) == "{'A': 5, 'B': 10, 'C': 12}");
-
s: 범위가 문자열로 포맷되어야 함을 나타냅니다. -
?s: 범위가 이스케이프된 문자열 로 포맷되어야 함을 나타냅니다.
-
-
s또는?s가 range-type 으로 선택된 경우,n옵션과 range-underlying-spec 은 형식 지정자에 포함되어서는 안 되며, -
T가CharT가 아닌 경우 프로그램은 형식이 잘못됩니다.
-
std::array star{'S', 'T', 'A', 'R'}; assert(std::format("{}", star) == "['S', 'T', 'A', 'R']"); assert(std::format("{:s}", star) == "STAR"); assert(std::format("{:?s}", star) == "\"STAR\"");
데이터 멤버
| 멤버 이름 | 정의 |
std::
formatter
<
T, CharT
>
underlying_
(private)
|
요소들을 위한 기본 포매터
( 설명 전용 멤버 객체* ) |
std::
basic_string_view
<
CharT
>
separator_
(private)
|
범위 포맷 결과의 구분자를 나타내는 문자열. 기본 구분자는
", "
입니다.
( 설명 전용 멤버 객체* ) |
std::
basic_string_view
<
CharT
>
opening-bracket_
(private)
|
범위 포맷 결과의 여는 괄호를 나타내는 문자열. 기본 여는 괄호는
"["
입니다.
( 설명 전용 멤버 객체* ) |
std::
basic_string_view
<
CharT
>
closing-bracket_
(private)
|
범위 포맷 결과의 닫는 괄호를 나타내는 문자열. 기본 닫는 괄호는
"]"
입니다.
( 설명 전용 멤버 객체* ) |
멤버 함수
|
set_separator
|
범위 형식화 결과에 지정된 구분자를 설정합니다
(public member function) |
|
set_brackets
|
범위 형식화 결과에 지정된 여는 괄호와 닫는 괄호를 설정합니다
(public member function) |
|
underlying
|
기본 포매터를 반환합니다
(public member function) |
|
parse
|
range-format-spec
에 지정된 형식 지정자를 구문 분석합니다
(public member function) |
|
format
|
range-format-spec
에 지정된 대로 범위 형식화 출력을 작성합니다
(public member function) |
std::range_formatter:: set_separator
|
constexpr
void
set_separator
(
std::
basic_string_view
<
CharT
>
sep
)
noexcept
;
|
||
sep
을
separator_
에 할당합니다.
std::range_formatter:: set_brackets
|
constexpr
void
set_brackets
(
std::
basic_string_view
<
CharT
>
opening,
std:: basic_string_view < CharT > closing ) noexcept ; |
||
opening
과
closing
을 각각
opening-bracket_
과
closing-bracket_
에 할당합니다.
std::range_formatter:: underlying
|
constexpr
std::
formatter
<
T, CharT
>
&
underlying
(
)
;
|
(1) | |
|
constexpr
const
std::
formatter
<
T, CharT
>
&
underlying
(
)
const
;
|
(2) | |
underlying_
(기본 포매터)를 반환합니다.
std::range_formatter:: parse
|
template
<
class
ParseContext
>
constexpr auto parse ( ParseContext & ctx ) - > ParseContext :: iterator ; |
||
형식 지정자를 range-format-spec 으로 파싱하고 파싱된 지정자를 현재 객체에 저장합니다.
underlying_
.
parse
(
ctx
)
를 호출하여
range-format-spec
내의
format-spec
을 파싱하거나,
해당 내용이 없는 경우 빈
format-spec
을 파싱합니다.
range-type
또는
n
옵션이 존재하는 경우,
opening-bracket_
,
closing-bracket_
,
separator_
의 값이 필요에 따라 수정됩니다.
다음 조건을 모두 만족할 경우
underlying_
.
set_debug_format
(
)
를 호출합니다:
-
range-type
이
s도?s도 아닌 경우 -
underlying_. set_debug_format ( ) 가 유효한 표현식인 경우 - range-underlying-spec 이 존재하지 않는 경우
range-format-spec 의 끝을 지난 반복자를 반환합니다.
std::range_formatter:: format
|
template
<
ranges::
input_range
R,
class
FormatContext
>
requires
std::
formattable
<
ranges::
range_reference_t
<
R
>
, CharT
>
&&
|
||
range-type
이
s
또는
?s
인 경우, 각각 문자열 또는 이스케이프된 문자열로 포맷된
std::
basic_string
<
CharT
>
(
std::
from_range
, r
)
을
ctx.
out
(
)
에 기록합니다.
그렇지 않은 경우, range-format-spec 에 지정된 대로 다음을 순서대로 ctx. out ( ) 에 기록합니다:
-
opening-bracket_, - 범위 r 의 각 포맷 가능한 요소 e 에 대해:
-
-
underlying_을 통해 e 를 기록한 결과, 그리고 -
e
가
r
의 마지막 요소가 아닌 경우
separator_,
-
-
closing-bracket_.
출력 범위의 끝을 지난 반복자를 반환합니다.
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 3892 | C++23 | 중첩 범위의 서식 지정이 올바르지 않았음 | 수정됨 |
참고 항목
|
(C++20)
|
주어진 타입에 대한 서식 규칙을 정의함
(클래스 템플릿) |