名前空間
変種
操作

std::formatter<pair-or-tuple>

From cppreference.com
< cpp‎ | utility‎ | format
 
 
 
 
ヘッダー <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 のいずれかを示します。

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

目次

[編集] フォーマット仕様

tuple-format-spec の構文は次のとおりです。

tuple-fill-and-align (省略可能) width (省略可能) tuple-type (省略可能)

tuple-fill-and-align は、 fill{}、または : 以外の文字である場合を除き、 fill-and-align と同じように解釈されます。

width は、 標準フォーマット幅仕様 で説明されています。

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

利用可能なタプルプレゼンテーション型は次のとおりです。

  • m: 開始と終了のブラケットの両方が "" で、セパレータが ": " であることを示します。
  • mtuple-type として選択された場合、 sizeof...(Ts) = 2true でない限り、プログラムは不正形式になります。
  • n: セパレータ、開始および終了ブラケットが "" であることを示します。

[編集] メンバオブジェクト

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

[編集] メンバ関数

set_separator
指定されたセパレータをタプルフォーマット結果に設定します。
(public member function)
set_brackets
指定された開始および終了ブラケットをタプルフォーマット結果に設定します。
(public member function)
parse
tuple-format-spec によって指定されたフォーマット指定子を解析します。
(public member function)
format
tuple-format-spec によって指定されたタプルフォーマット出力を書き込みます。
(public member function)

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

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

sepseparator_ に代入します。

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

constexpr void set_brackets( std::basic_string_view<CharT> opening,
                             std::basic_string_view<CharT> closing ) noexcept;

openingclosing を、それぞれ 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-bracketclosing-bracket、および separator の値が必要に応じて変更されます。

underlying_ の各要素 e について、 e.parse(ctx) を呼び出して空の format-spec を解析し、 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[0sizeof...(Ts)) の範囲にある場合
  • もし I != 0 なら、 separator_
  • std::get<I>(elems)std::get<I>(underlying_) 経由で書き込んだ結果。
  • closing-bracket_.

出力範囲の末尾以降のイテレータを返します。

[編集] 不具合報告

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

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

[編集] 関連項目

(C++20)
与えられた型のフォーマット規則を定義する
(クラステンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)