Namespaces
Variants

std:: formatter < pair-or-tuple >

From cppreference.net
ヘッダーで定義 <format>
template < class CharT, std:: formattable < CharT > ... Ts >
struct formatter < /*pair-or-tuple*/ < Ts... > , CharT > ;
(C++23以降)

std::formatter のテンプレート特殊化は、 std::pair および std::tuple に対して、ユーザーが フォーマット関数 を使用してペアまたはタプルを要素の集合としてテキスト表現に変換することを可能にします。

説明専用の名前 /*pair-or-tuple*/ は、クラステンプレート std::pair または std::tuple のいずれかを示します。

この特殊化は、 Formatter 要件を満たす( ( std:: formattable < const Ts, CharT > && ... ) true の場合)。常に BasicFormatter 要件を満たす。

目次

フォーマット仕様

tuple-format-spec の構文は以下の通りです:

tuple-fill-and-align  (オプション) width  (オプション) tuple-type  (オプション)

tuple-fill-and-align は、 fill-and-align と同様に解釈されますが、 tuple-fill-and-align における fill は、 { } 、または : 以外の任意の文字です。

width 標準フォーマット幅指定 で記述されます。

tuple-type はタプルのフォーマット方法を変更し、特定のオプションは特定の引数型でのみ有効です。

利用可能なタプル表示型は以下の通りです:

  • m : 開き括弧と閉じ括弧の両方が "" であるべきであることを示し、区切り文字は ": " であるべきことを示します。
  • m tuple-type として選択された場合、 sizeof... ( Ts ) == 2 true でない限り、プログラムは ill-formed です。
  • n : セパレータ、開き括弧、閉じ括弧が "" であるべきことを示します。

メンバーオブジェクト

メンバー名 定義
underlying_ (private) std:: tuple < std:: formatter < std:: remove_cvref_t < Ts > , CharT > ... > の基底フォーマッタのタプル
( 説明専用メンバーオブジェクト* )
separator_ (private) タプルフォーマット結果のセパレータを表す文字列(デフォルトは ", "
( 説明専用メンバーオブジェクト* )
opening-bracket_ (private) タプルフォーマット結果の開始ブラケットを表す文字列(デフォルトは "("
( 説明専用メンバーオブジェクト* )
closing-bracket_ (private) タプルフォーマット結果の終了ブラケットを表す文字列(デフォルトは ")"
( 説明専用メンバーオブジェクト* )

メンバー関数

set_separator
タプルフォーマット結果の区切り文字を指定する
(公開メンバ関数)
set_brackets
タプルフォーマット結果の開始括弧と終了括弧を指定する
(公開メンバ関数)
parse
tuple-format-spec で指定されたフォーマット指定子を解析する
(公開メンバ関数)
format
tuple-format-spec で指定されたタプルフォーマット出力を書き込む
(公開メンバ関数)

std::formatter< pair-or-tuple >:: set_separator

constexpr void set_separator ( std:: basic_string_view < CharT > sep ) noexcept ;

sep separator_ に割り当てます。

std::formatter< pair-or-tuple >:: 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::formatter< pair-or-tuple >:: parse

template < class ParseContext >
constexpr auto parse ( ParseContext & ctx ) - > ParseContext :: iterator ;

書式指定子を tuple-format-spec として解析し、解析された指定子を現在のオブジェクトに格納します。

tuple-type または n オプションが存在する場合、 opening-bracket closing-bracket 、および separator の値が必要に応じて変更されます。

underlying_ 内の各要素 e に対して、空の format-spec を解析するために e. parse ( ctx ) を呼び出し、 e. set_debug_format ( ) が有効な式である場合、 e. set_debug_format ( ) を呼び出します。

tuple-format-spec の終端を過ぎたイテレータを返します。

std::formatter< pair-or-tuple >:: format

template < class FormatContext >

FormatContext :: iterator

format ( /*maybe-const-pair-or-tuple*/ < Ts... > & elems, FormatContext & ctx ) const ;

/*maybe-const-pair-or-tuple*/ は以下を表します:

  • const /*pair-or-tuple*/ 、もし ( std:: formattable < const Ts, CharT > && ... ) true の場合、
  • /*pair-or-tuple*/ それ以外の場合。

以下の内容を ctx. out ( ) tuple-format-spec で指定された通りに順に書き込みます:

  • opening-bracket_
  • 各インデックス I について [ 0 , sizeof... ( Ts ) )
  • もし I ! = 0 ならば、 separator_
  • std :: get < I > ( elems ) std :: get < I > ( underlying_ ) を通して書き込んだ結果、および
  • closing-bracket_

出力範囲の終端を過ぎたイテレータを返します。

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 3892 C++23 ネストされたタプルのフォーマットが不正であった 修正済み

関連項目

(C++20)
指定された型のフォーマット規則を定義する
(クラステンプレート)