名前空間
変種
操作

C++ 名前付き要件: Formatter (C++20 以降)

From cppreference.com
 
 
C++ 名前付き要件
 

Formatter は、指定されたフォーマット引数型と文字型に対するフォーマット操作を抽象化する型です。標準ライブラリによって提供される std::formatter の特殊化は、特に断りがない限り、Formatter の要件を満たす必要があります。

const および非 const 引数の両方をフォーマットできる Formatter は、通常、const 参照を受け取る format メンバ関数を提供することによって実現されます。

[編集] 要件

型が Formatter を満たすとは、BasicFormatter を満たし、以下の型と値が与えられた場合に、以下の表に示す式が有効であり、示された意味を持つことです。

定義
CharT 文字型
Arg フォーマット引数型
フォーマッタ Arg 型と CharT 型の Formatter
OutputIt LegacyOutputIterator
ParseCtx std::basic_format_parse_context<CharT>
FmtCtx std::basic_format_context<OutputIt, CharT>
定義
f Formatter 型の値(possibly const-qualified)
arg Arg 型の左辺値
t Arg 型に変換可能な値(possibly const-qualified)
parse_ctx 以下のすべての条件を満たす ParseCtx 型の左辺値
  • parse_ctx.begin() は、フォーマット文字列中のフォーマットされている置換フィールドの format-spec の先頭を指します。
  • format-spec が存在しないか空の場合、parse_ctx.begin() == parse_ctx.end() または *parse_ctx.begin() == '}' のいずれかです。
fmt_ctx FmtCtx 型の左辺値
Expression 戻り値の型 セマンティクス
f.format(t, fmt_ctx) FmtCtx::iterator 
  • f に格納されている指定子に従って t をフォーマットし、出力を fmt_ctx.out() に書き込み、出力範囲の終端イテレータを返します。
  • 出力は以下にのみ依存できます。
    • t,
    • fmt_ctx.locale(),
    • f.parse(parse_ctx) の最後の呼び出しからの、[parse_ctx.begin()parse_ctx.end()) の範囲、および
    • nstd::size_t 型の値である場合、 fmt_ctx.arg(n)
f.format(arg, fmt_ctx) FmtCtx::iterator 上記と同様ですが、arg を変更しません。

[編集] 不具合報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 3892 C++20 format-spec が存在しない場合、pc.begin() の値が不明瞭でした。 明確化された
English 日本語 中文(简体) 中文(繁體)