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-or-tuple*/ 代表类模板 std::pair 或 std::tuple。
此特化在 (std::formattable<const Ts, CharT> && ...) 为 true 时满足格式化器 (Formatter) 的规定。它始终满足基本格式化器 (BasicFormatter) 的规定。
格式说明
元组格式说明 的语法是:
元组填充与对齐 (可选) 宽度 (可选) 元组类型 (可选) | |||||||||
元组填充与对齐 与 填充与对齐 的判读方式相同,但 元组填充与对齐 中的 填充 是除 {
、}
和 :
外的任意字符。
宽度 在标准格式宽度说明中描述。
元组类型 改变格式化元组的方式,某些选项仅对特定实参类型有效。
可用的元组呈现类型有:
-
m
:指示开闭括号都应为 "" 而分隔符应为 ": "。
- 如果选择
m
为 元组类型,则除非 sizeof...(Ts) == 2 为 true,否则程序非良构。
- 如果选择
-
n
:指示分隔符和开闭括号都应为 ""。
成员对象
成员名字 | 定义 |
underlying_ (私有)
|
std::tuple<std::formatter<std::remove_cvref_t<Ts>, CharT>...> 类型的底层格式化器元组 (仅用于阐述的成员对象*) |
separator_ (私有)
|
表示元组格式化结果的分隔符的字符串(默认为 ", ") (仅用于阐述的成员对象*) |
opening-bracket_ (私有)
|
表示元组格式化结果的开括号的字符串(默认为 "(") (仅用于阐述的成员对象*) |
closing-bracket_ (私有)
|
表示元组格式化结果的闭括号的字符串(默认为 ")") (仅用于阐述的成员对象*) |
成员函数
set_separator |
设置元组格式化结果使用指定的分隔符 (公开成员函数) |
set_brackets |
设置元组格式化结果使用指定的开闭括号 (公开成员函数) |
parse |
按照 范围格式说明 的说明解析格式说明符 (公开成员函数) |
format |
按照 范围格式说明 写入范围的格式化输出 (公开成员函数) |
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; |
||
按 元组格式说明 解析各个格式说明符,并将所解析的说明符存储到当前对象中。
如果有 元组类型 或 n
选项,则按需要改动 opening-bracket
、closing-bracket
和 separator
的值。
对于 underlying_
中的每个 e,调用 e.parse(ctx) 以解析一个空 格式说明,并且若 e.set_debug_format() 是有效表达式,则调用 e.set_debug_format()。
返回 元组格式说明 的尾后迭代器。
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*/。
根据 元组格式说明 将以下各项依次写入 ctx.out():
-
opening-bracket_
, - 对于
[
0,
sizeof...(Ts))
中的每个索引 I:
-
closing-bracket_
。
返回输出范围的尾后迭代器。
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 3892 | C++23 | 嵌套元组的格式化不正确 | 已修正 |
参阅
(C++20) |
定义针对给定类型的格式化规则 (类模板) |