C++ 具名要求:格式化器 (Formatter)

来自cppreference.com
< cpp‎ | named req
 
 
C++ 具名要求
基础
类型属性
库所属
容器
容器元素
迭代器
流 I/O
随机数
并发
(C++11)
(C++11)
其他
 

格式化器 (Formatter) 是对给定的格式化实参类型与字符类型抽象化格式化操作的类型。要求 std::formatter 的特化实现格式化器 (Formatter)

要求

一个类型满足格式化器 (Formatter) ,若它为半正则,意思是它满足:

而且给定

  • Arg ,格式化实参类型
  • CharT ,字符类型
  • Formatter ,对于类型 ArgCharT格式化器 (Formatter) 类型
  • OutputIt老式输出迭代器 (LegacyOutputIterator) 类型
  • formatterFormatter 类型值
  • argArg 类型左值
  • t ,可转换到(可能为 const )的 Arg
  • ParseContextstd::basic_format_parse_context<CharT> 的别名
  • FormatContextstd::basic_format_context<OutputIt, CharT> 的别名
  • parse_contextParseContext 类型左值
  • format_contextFormatContext 类型左值
表达式 返回类型 语义
formatter.parse(parse_context) ParseContext::iterator
  • 对类型 Arg 分析 格式说明 [parse_context.begin(), parse_context.end()) ,直至首个未匹配的字符。
  • 抛出 std::format_error ,除非可分析整个范围或首个未匹配字符是 }[注 1]
  • 存储分析的格式说明符到 formatter 中并返回已分析范围的尾迭代器。
formatter.format(t, format_context) FormatContext::​iterator
  • 按存储于 formatter 的格式说明符分析 t ,写输出到 format_context.out() 并返回输出范围的尾迭代器。
  • 输出应当仅依赖
    • t
    • format_context.locale()
    • 来自前一次调用的范围 [parse_context.begin(), parse_context.end()) ,以及
    • 对于任何 std::size_t 类型值 nformat_context.arg(n)
formatter.format(arg, format_context) FormatContext::​iterator

同上,但不修改 arg

  1. 这允许格式化器放出有意义的错误消息。