std::formatter<pair-or-tuple>
定義於標頭檔案 <format> |
||
template< class CharT, std::formattable<CharT>... Ts > struct formatter</*pair-or-tuple*/<Ts...>, CharT>; |
(C++23 起) | |
std::formatter 對 std::pair 和 std::tuple 的模板特化允許使用者使用格式化函式將 pair 或 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-and-align 相同,只是 tuple-fill-and-align 中的 fill 是除了 {
、}
或 :
之外的任何字元。
width 在標準格式寬度規範中描述。
tuple-type 改變了元組的格式化方式,某些選項僅對某些引數型別有效。
可用的元組表示型別有
-
m
:表示開括號和閉括號都應為 "",而分隔符應為 ": "。
- 如果選擇
m
作為 tuple-type,則除非 sizeof...(Ts) == 2 為 true,否則程式是非良構的。
- 如果選擇
-
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; |
||
分別將 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,呼叫 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 |
||
/*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_
, - 對於
[
0,
sizeof...(Ts))
中的每個索引 I
- 如果 I != 0,則為
separator_
, - 透過 std::get<I>(
underlying_
) 寫入 std::get<I>(elems) 的結果,以及
- 如果 I != 0,則為
-
closing-bracket_
.
返回一個迭代器,指向輸出範圍的末尾之後。
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 3892 | C++23 | 巢狀元組的格式化不正確 | 已更正 |
[編輯] 另請參閱
(C++20) |
定義給定型別的格式化規則 (類模板) |