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 或 tuple 转换为其元素集合的文本表示形式。

说明性名称 /*pair-or-tuple*/ 表示类模板 std::pair std::tuple

( std:: formattable < const Ts, CharT > && ... ) true 时,该特化满足 Formatter 要求。该特化始终满足 BasicFormatter 要求。

目录

格式规范

tuple-format-spec 的语法为:

元组填充与对齐  (可选) 宽度  (可选) 元组类型  (可选)

tuple-fill-and-align 的解释方式与 fill-and-align 相同,不同之处在于 tuple-fill-and-align 中的 fill 可以是除 { } : 之外的任意字符。

width 的描述遵循 标准格式宽度规范

tuple-type 会改变元组的格式化方式,某些选项仅对特定参数类型有效。

可用的元组表示类型包括:

  • m : 表示起始和结束括号应为 "" ,而分隔符应为 ": "
  • 如果选择 m 作为 元组类型 ,则程序除非满足 sizeof... ( Ts ) == 2 的条件,否则将呈现为病式结构。
  • 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 ;

解析格式说明符为 元组格式说明 ,并将解析后的说明符存储在当前对象中。

如果存在 元组类型 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

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_
  • 对于索引 I [ 0 , sizeof... ( Ts ) ) 范围内:
  • I ! = 0 ,则写入 separator_
  • 通过 std :: get < I > ( underlying_ ) 写入 std :: get < I > ( elems ) 的结果,以及
  • closing-bracket_

返回指向输出范围末尾的迭代器。

缺陷报告

下列行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 应用于 发布时的行为 正确行为
LWG 3892 C++23 嵌套元组的格式化不正确 已修正

参见

(C++20)
为给定类型定义格式化规则
(类模板)