C++ 命名要求: BasicFormatter (自 C++20 起)
BasicFormatter 是一个抽象类型,用于对给定的格式参数类型和字符类型执行格式化操作。需要对 std::formatter 进行特化才能满足 BasicFormatter 的要求。
如果一个 BasicFormatter 能够格式化 const 和非 const 参数,则它是一个 Formatter。
要求
如果一个类型满足 BasicFormatter,意味着它是半正则的,即它满足
并且,给定
Arg
,一个格式参数类型CharT
,一个字符类型BasicFormatter
,类型为 Arg 和 CharT 的 BasicFormatter 类型OutputIt
,一个 LegacyOutputIterator 类型f
,类型为(可能是 const 的)BasicFormatter 的值g
,类型为 BasicFormatter 的值arg
,类型为 Arg 的左值ParseContext
,是std::basic_format_parse_context<CharT>
的别名FormatContext
,是std::basic_format_context<OutputIt, CharT>
的别名parse_ctx
,类型为 ParseContext 的左值format_ctx
,类型为 FormatContext 的左值
表达式 | 返回类型 | 语义 |
---|---|---|
g.parse(parse_ctx) | ParseContext::iterator | * 解析类型 Arg 的格式说明符 [parse_ctx.begin(), parse_ctx.end()) ,直到遇到第一个不匹配的字符。* 除非解析了整个范围或不匹配的字符是 } ,否则会抛出 [std::format_error]。[1]* 将解析后的格式说明符存储在 g 中,并返回解析范围的结束迭代器。 |
f.format(arg, format_ctx) | FormatContext::iterator | * 根据 f 中存储的说明符格式化 arg ,将输出写入 format_ctx.out() ,并返回输出范围的结束迭代器。* 输出应仅取决于 * arg, * format_ctx.locale(), * 上一次调用 f.parse(parse_ctx) 之后的范围 [parse_ctx.begin(), parse_ctx.end()) ,以及* 任何类型为 std::size_t 的值 n 的 format_ctx.arg(n) 。 |
1 ↑ 这允许格式化器发出有意义的错误消息。