C++ 命名要求: BasicFormatter (C++20 起)
来自 cppreference.cn
BasicFormatter 是一种类型,它为给定的格式化参数类型和字符类型抽象格式化操作。`std::formatter` 的特化需要满足 `BasicFormatter` 的要求。
如果 `BasicFormatter` 能够格式化 const 和非 const 参数,则它是一个 Formatter。
[编辑] 要求
如果一个类型是半正则的,则它满足 `BasicFormatter`,这意味着它满足
- DefaultConstructible(可默认构造)
- CopyConstructible(可复制构造)
- CopyAssignable(可复制赋值)
- Destructible(可析构)
- Swappable(可交换)
并且,给定以下类型和值,下表中显示表达式是有效的并具有指示的语义
类型 | 定义 |
CharT
|
字符类型 |
Arg
|
格式化参数类型 |
Formatter
|
类型 `Arg` 和 `CharT` 的 `Formatter` 类型 |
OutputIt
|
LegacyOutputIterator 类型 |
ParseCtx
|
std::basic_format_parse_context<CharT> |
FmtCtx
|
std::basic_format_context<OutputIt, CharT> |
值 | 定义 |
f | 类型 `Formatter` 的值(可能是 const 限定的) |
g | 类型 `Formatter` 的值 |
arg | 类型 `Arg` 的左值 |
t | 可转换为类型 `Arg` 的值(可能是 const 限定的) |
parse_ctx | 类型 `ParseCtx` 的左值,满足以下所有条件
|
fmt_ctx | 类型 `FmtCtx` 的左值 |
表达式 | 返回类型 | 语义 |
---|---|---|
g.parse(parse_ctx) | ParseCtx::iterator
|
|
f.format(arg, fmt_ctx) | FmtCtx::iterator
|
|
- ↑ 这允许格式化器发出有意义的错误消息。
[编辑] 缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 发布时的行为 | 正确的行为 |
---|---|---|---|
LWG 3892 | C++20 | 如果 format-spec 不存在,pc.begin() 的值不明确 | 已明确 |