命名空间
变体
操作

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 或一个 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 更改 tuple 的格式化方式,某些选项仅对某些参数类型有效。

可用的元组表示类型为

  • m:指示起始和结束括号都应为 "",而分隔符应为 ": "
  • 如果选择 m 作为 tuple-type,则除非 sizeof...(Ts) == 2true,否则程序格式错误。
  • n:指示分隔符、起始和结束括号都应为 ""

[编辑] 成员对象

成员名称 定义
underlying_ (私有) 类型为 std::tuple<std::formatter<std::remove_cvref_t<Ts>, CharT>...> 的基础格式化程序元组
(仅用于说明的成员对象*)
separator_ (私有) 表示元组格式化结果分隔符的字符串(默认为 ", "
(仅用于说明的成员对象*)
opening-bracket_ (私有) 表示元组格式化结果起始括号的字符串(默认为 "("
(仅用于说明的成员对象*)
closing-bracket_ (私有) 表示元组格式化结果结束括号的字符串(默认为 ")"
(仅用于说明的成员对象*)

[编辑] 成员函数

set_separator
为元组格式化结果设置指定的分隔符
(公有成员函数)
set_brackets
为元组格式化的结果设置指定的开闭括号。
(公有成员函数)
解析
解析由 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_.

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

[edit] 缺陷报告

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

DR 应用于 发布的行为 正确的行为
LWG 3892 C++23 嵌套元组的格式化不正确 已更正

[edit] 另请参阅

(C++20)
定义给定类型的格式化规则。
(类模板) [edit]