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
的解释方式与
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
|
||
/*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 ) 的结果,以及
-
若
I
!
=
0
,则写入
-
closing-bracket_。
返回指向输出范围末尾的迭代器。
缺陷报告
下列行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 应用于 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 3892 | C++23 | 嵌套元组的格式化不正确 | 已修正 |
参见
|
(C++20)
|
为给定类型定义格式化规则
(类模板) |