std:: formatter
|
헤더에 정의됨
<format>
|
||
|
template
<
class
T,
class
CharT
=
char
>
struct formatter ; |
(C++20부터) | |
std::formatter
의 활성화된 특수화는 주어진 타입에 대한 서식 규칙을 정의합니다. 활성화된 특수화는
BasicFormatter
요구사항을 충족하며, 별도로 명시되지 않는 한
Formatter
요구사항도 충족합니다.
모든 타입
T
와
CharT
에 대해, 특수화
std::formatter<T, CharT>
가 활성화되지 않은 경우, 해당 특수화는 완전한 타입이며 비활성화됩니다.
비활성화된 특수화는 Formatter 요구사항을 충족하지 않으며, 다음은 모두 false 입니다:
- std::is_default_constructible_v
- std::is_copy_constructible_v
- std::is_move_constructible_v
- std::is_copy_assignable_v
- std::is_move_assignable_v .
목차 |
기본 표준 특수화
다음 목록에서,
CharT
는
char
또는
wchar_t
입니다.
ArithmeticT
는
char
,
wchar_t
,
char8_t
,
char16_t
, 또는
char32_t
를 제외한 cv-한정자가 없는 모든 산술 타입입니다:
|
문자 포매터
|
||
|
template
<>
struct formatter < char , char > ; |
(1) | |
|
template
<>
struct formatter < char , wchar_t > ; |
(2) | |
|
template
<>
struct formatter < wchar_t , wchar_t > ; |
(3) | |
|
문자열 포매터
|
||
|
template
<>
struct formatter < CharT * , CharT > ; |
(4) | |
|
template
<>
struct formatter < const CharT * , CharT > ; |
(5) | |
|
template
<
std::
size_t
N
>
struct formatter < CharT [ N ] , CharT > ; |
(6) | |
|
template
<
class
Traits,
class
Alloc
>
struct formatter < std:: basic_string < CharT, Traits, Alloc > , CharT > ; |
(7) | |
|
template
<
class
Traits
>
struct formatter < std:: basic_string_view < CharT, Traits > , CharT > ; |
(8) | |
|
산술 포매터
|
||
|
template
<>
struct formatter < ArithmeticT, CharT > ; |
(9) | |
|
포인터 포매터
|
||
|
template
<>
struct formatter < std:: nullptr_t , CharT > ; |
(10) | |
|
template
<>
struct formatter < void * , CharT > ; |
(11) | |
|
template
<>
struct formatter < const void * , CharT > ; |
(12) | |
다른 포인터 및 멤버 포인터에 대한 포맷터는 비활성화됩니다.
인코딩 변환이 필요한 std :: formatter < wchar_t , char > 및 std :: formatter < const char * , wchar_t > 와 같은 특수화는 비활성화됩니다.
|
다음 전문화들은 일부 char 시퀀스를 wchar_t 범위로 포맷하는 것을 피하기 위해 C++23에서 여전히 비활성화됩니다:
디버그 활성화된
포매터 전문화는 추가적으로 공개 비정적 멤버 함수
constexpr
void
set_debug_format
(
)
;
를 제공하며, 이는 포매터 객체의 상태를 수정하여 값들을
이스케이프되고 인용된 형태
로 포맷하도록 합니다. 마치 마지막
문자열 또는 문자 타입에 대한 각 포매터 전문화는 디버그 활성화됩니다 . |
(C++23부터) |
표준 형식 사양
|
이 섹션은 불완전합니다
이유: 표준 형식 지정이 별도의 페이지 로 이동되었습니다. 이 섹션의 제목은 이 섹션으로의 링크를 위해 임시로 보존됩니다. 모든 링크가 정리된 후 이 섹션은 제거될 예정입니다. |
라이브러리 타입을 위한 표준 특수화
duration
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
sys_time
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
utc_time
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
tai_time
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
gps_time
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
file_time
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
local_time
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
day
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
month
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
year
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
weekday
에 대한 포맷팅 지원
(클래스 템플릿 특수화) |
|
weekday_indexed
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
weekday_last
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
month_day
에 대한 포맷팅 지원
(클래스 템플릿 특수화) |
|
month_day_last
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
month_weekday
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
month_weekday_last
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
year_month
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
year_month_day
에 대한 서식 지정 지원
(클래스 템플릿 특수화) |
|
year_month_day_last
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
year_month_weekday
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
year_month_weekday_last
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
hh_mm_ss
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
sys_info
에 대한 포맷팅 지원
(클래스 템플릿 특수화) |
|
local_info
에 대한 포맷팅 지원
(클래스 템플릿 특수화) |
|
zoned_time
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
basic_stacktrace
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
stacktrace_entry
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
|
(C++23)
|
thread::id
에 대한 포맷팅 지원
(클래스 템플릿 특수화) |
vector<bool>::reference
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
|
(C++23)
|
pair
및
tuple
에 대한
포매팅 지원
(클래스 템플릿 특수화) |
|
(C++23)
|
범위에 대한 포매팅 지원
(클래스 템플릿 특수화) |
|
(C++23)
|
std::stack
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
(C++23)
|
std::queue
에 대한 포맷팅 지원
(클래스 템플릿 특수화) |
std::priority_queue
에 대한 서식 지원
(클래스 템플릿 특수화) |
|
filesystem::path
에 대한 포맷팅 지원
(클래스 템플릿 특수화) |
예제
#include <algorithm> #include <format> #include <iomanip> #include <iostream> #include <sstream> #include <string_view> struct QuotableString : std::string_view {}; template<> struct std::formatter<QuotableString, char> { bool quoted = false; template<class ParseContext> constexpr ParseContext::iterator parse(ParseContext& ctx) { auto it = ctx.begin(); if (it == ctx.end()) return it; if (*it == '#') { quoted = true; ++it; } if (it != ctx.end() && *it != '}') throw std::format_error("Invalid format args for QuotableString."); return it; } template<class FmtContext> FmtContext::iterator format(QuotableString s, FmtContext& ctx) const { std::ostringstream out; if (quoted) out << std::quoted(s); else out << s; return std::ranges::copy(std::move(out).str(), ctx.out()).out; } }; int main() { QuotableString a("be"), a2(R"( " be " )"); QuotableString b("a question"); std::cout << std::format("To {0} or not to {0}, that is {1}.\n", a, b); std::cout << std::format("To {0:} or not to {0:}, that is {1:}.\n", a, b); std::cout << std::format("To {0:#} or not to {0:#}, that is {1:#}.\n", a2, b); }
출력:
To be or not to be, that is a question. To be or not to be, that is a question. To " \" be \" " or not to " \" be \" ", that is "a question".
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 3944 | C++23 | 일부 char 시퀀스가 wchar_t 범위로 포맷 가능했음 | 추가된 특수화 비활성화 |
참고 항목
|
(C++20)
(C++20)
(C++20)
|
포매팅 상태, 모든 포매팅 인자와 출력 반복자를 포함함
(클래스 템플릿) |
|
(C++23)
|
타입이 포맷 가능함을 지정함, 즉
std::formatter
를 특수화하고
parse
와
format
멤버 함수를 제공함
(컨셉) |
|
(C++23)
|
범위 타입에 대한
std::formatter
특수화 구현을 돕는 클래스 템플릿
(클래스 템플릿) |