名稱空間
變體
操作

std::formatter<pair-or-tuple>

來自 cppreference.com
< cpp‎ | utility‎ | format
 
 
 
 
定義於標頭檔案 <format>
template< class CharT, std::formattable<CharT>... Ts >
struct formatter</*pair-or-tuple*/<Ts...>, CharT>;
(C++23 起)

std::formatterstd::pairstd::tuple 的模板特化允許使用者使用格式化函式將 pair 或 tuple 轉換為其元素集合的文字表示。

僅用於解釋的名稱 /*pair-or-tuple*/ 表示類模板 std::pairstd::tuple

如果 (std::formattable<const Ts, CharT> && ...)true,則此特化滿足 Formatter 要求。它總是滿足 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) == 2true,否則程式是非良構的。
  • n:表示分隔符、開括號和閉括號都應為 ""

[編輯] 成員物件

成員名稱 (Member name) 定義
underlying_ (私有) 型別為 std::tuple<std::formatter<std::remove_cvref_t<Ts>, CharT>...> 的底層格式化器元組
(僅用於闡釋的成員物件*)
separator_ (私有) 表示元組格式化結果分隔符的字串(預設為 ", "
(僅用於闡釋的成員物件*)
opening-bracket_ (私有) 表示元組格式化結果開括號的字串(預設為 "("
(僅用於闡釋的成員物件*)
closing-bracket_ (私有) 表示元組格式化結果閉括號的字串(預設為 ")"
(僅用於闡釋的成員物件*)

[編輯] 成員函式

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;

分別將 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-typen 選項,則根據需要修改 opening-bracketclosing-bracketseparator 的值。

對於 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*/

tuple-format-spec 指定的順序將以下內容寫入 ctx.out()

  • opening-bracket_,
  • 對於 [0sizeof...(Ts)) 中的每個索引 I
  • 如果 I != 0,則為 separator_
  • 透過 std::get<I>(underlying_) 寫入 std::get<I>(elems) 的結果,以及
  • closing-bracket_.

返回一個迭代器,指向輸出範圍的末尾之後。

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 3892 C++23 巢狀元組的格式化不正確 已更正

[編輯] 另請參閱

(C++20)
定義給定型別的格式化規則
(類模板) [編輯]