C++ 命名要求: BasicFormatter (C++20 起)
來自 cppreference.com
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() 的值不明確 | 已明確 |