std::formatter<pair-or-tuple>

来自cppreference.com
< cpp‎ | utility‎ | format
 
 
工具库
语言支持
类型支持(基本类型、RTTI)
库功能特性测试宏 (C++20)
动态内存管理
程序工具
协程支持 (C++20)
变参数函数
调试支持
(C++26)
三路比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)

 
 
在标头 <format> 定义
template< class CharT, std::formattable<CharT>... Ts >
struct formatter</*pair-or-tuple*/<Ts...>, CharT>;
(C++23 起)

std::formatter 针对 std::pairstd::tuple 的模板特化,允许用户使用格式化函数将对偶或元组转换为元素汇集的文本表示。

仅用于阐释的名字 /*pair-or-tuple*/ 代表类模板 std::pairstd::tuple

此特化在 (std::formattable<const Ts, CharT> && ...)true 时满足格式化器 (Formatter) 的规定。它始终满足基本格式化器 (BasicFormatter) 的规定。

格式说明

元组格式说明 的语法是:

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

元组填充与对齐填充与对齐 的判读方式相同,但 元组填充与对齐 中的 填充 是除 {}: 外的任意字符。

宽度标准格式宽度说明中描述。

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

可用的元组呈现类型有:

  • m:指示开闭括号都应为 "" 而分隔符应为 ": "
  • 如果选择 m元组类型,则除非 sizeof...(Ts) == 2true,否则程序非良构。
  • 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;

赋值 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;

分别赋值 openingclosingopening-bracket_closing-bracket_

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

template< class ParseContext >
constexpr auto parse( ParseContext& ctx ) -> ParseContext::iterator;

元组格式说明 解析各个格式说明符,并将所解析的说明符存储到当前对象中。

如果有 元组类型n 选项,则按需要改动 opening-bracketclosing-bracketseparator 的值。

对于 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*/

根据 元组格式说明 将以下各项依次写入 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)
定义针对给定类型的格式化规则
(类模板)