std::basic_format_parse_context
定义在头文件 <format> 中 |
||
template< class CharT > class basic_format_parse_context; |
(自 C++20 起) | |
提供对格式字符串解析状态的访问,该状态由正在解析的格式字符串范围和用于自动索引的参数计数器组成。
std::basic_format_parse_context
实例在解析格式规范时传递给 Formatter。
声明 std::basic_format_parse_context
的显式或部分特化的程序是非法的,不需要诊断。
提供了用于常见字符类型的多个类型定义
定义在头文件
<format> 中 | |
类型 | 定义 |
std::format_parse_context
|
std::basic_format_parse_context<char> |
std::wformat_parse_context
|
std::basic_format_parse_context<wchar_t> |
[编辑] 成员类型
类型 | 定义 |
char_type
|
CharT
|
iterator
|
std::basic_string_view<CharT>::const_iterator |
const_iterator
|
std::basic_string_view<CharT>::const_iterator |
[编辑] 成员函数
(构造函数) |
从格式字符串和参数计数构造 std::basic_format_parse_context 实例(公有成员函数) |
operator= [删除] |
std::basic_format_parse_context 不可复制(公有成员函数) |
begin |
返回格式字符串范围的开头迭代器 (公有成员函数) |
end |
返回格式字符串范围的末尾迭代器 (公有成员函数) |
advance_to |
将 begin 迭代器推进到给定位置 (公有成员函数) |
next_arg_id |
进入自动索引模式,并返回下一个参数索引 (公有成员函数) |
check_arg_id |
进入手动索引模式,检查给定参数索引是否在范围内 (公有成员函数) |
check_dynamic_spec (C++26) |
检查具有给定参数索引的对应格式参数的类型是否在给定类型模板参数中 (公有成员函数) |
check_dynamic_spec_integral (C++26) |
检查具有给定参数索引的对应格式参数的类型是否为整数类型 (公有成员函数) |
check_dynamic_spec_string (C++26) |
检查具有给定参数索引的对应格式参数的类型是否为字符串类型 (公有成员函数) |
std::basic_format_parse_context::basic_format_parse_context
(1) | ||
constexpr explicit basic_format_parse_context( std::basic_string_view<CharT> fmt, |
(直到 C++26) | |
constexpr explicit basic_format_parse_context( std::basic_string_view<CharT> fmt ) noexcept; |
(自 C++26 起) | |
basic_format_parse_context( const basic_format_parse_context& ) = delete; |
(2) | |
std::basic_format_parse_context
实例。将格式字符串范围初始化为 [
fmt.begin(),
fmt.end())
,并将参数计数初始化为 num_args(直到 C++26)0(自 C++26 起).
对使用此构造函数初始化的 |
(自 C++26 起) |
std::basic_format_parse_context
不可复制。std::basic_format_parse_context::begin
constexpr const_iterator begin() const noexcept; |
||
返回格式字符串范围的开头迭代器。
std::basic_format_parse_context::end
constexpr const_iterator end() const noexcept; |
||
返回格式字符串范围的末尾迭代器。
std::basic_format_parse_context::advance_to
constexpr void advance_to( const_iterator it ); |
||
将格式字符串范围的开头设置为 it。在调用 advance_to()
后,后续对 begin()
的调用将返回 it 的副本。
如果 end() 从 it 不可达,则行为未定义。
std::basic_format_parse_context::next_arg_id
constexpr std::size_t next_arg_id(); |
||
进入自动参数索引模式,并返回下一个参数索引,从 0 开始。
如果 *this 已经进入手动参数索引模式,则抛出 std::format_error。
如果下一个参数索引大于或等于构造函数中提供的 num_args,则调用不是核心常量表达式。
std::basic_format_parse_context::check_arg_id
constexpr void check_arg_id( std::size_t id ); |
||
进入手动参数索引模式。
如果 *this 已经进入自动参数索引模式,则抛出 std::format_error。
如果 id 大于或等于构造函数中提供的 num_args,则调用不是核心常量表达式。
std::basic_format_parse_context::check_dynamic_spec
template< class... Ts > constexpr void check_dynamic_spec( std::size_t id ) noexcept; |
(自 C++26 起) | |
如果 id 大于或等于构造函数中提供的 num_args,或者对应格式参数的类型(在转换为 std::basic_format_arg 之后)不是 Ts... 中的类型之一,则调用不是核心常量表达式。对 check_dynamic_spec 的调用在运行时没有影响。
- 仅当 Ts... 中的类型是唯一的,并且每个类型都是 bool、char_type、int、unsigned int、long long int、unsigned long long int、float、double、long double、const char_type*、std::basic_string_view<char_type> 或 const void* 时,此重载才参与重载解析。
std::basic_format_parse_context::check_dynamic_spec_integral
constexpr void check_dynamic_spec_integral( std::size_t id ) noexcept; |
(自 C++26 起) | |
等效于调用 check_dynamic_spec<int, unsigned int, long long int, unsigned long long int>(id)。对 check_dynamic_spec_integral 的调用在运行时没有影响。
std::basic_format_parse_context::check_dynamic_spec_string
constexpr void check_dynamic_spec_string( std::size_t id ) noexcept; |
(自 C++26 起) | |
等效于调用 check_dynamic_spec<const char_type*, std::basic_string_view<char_type>>(id)。对 check_dynamic_spec_string 的调用在运行时没有影响。
[edit] Example
本节内容不完整。 原因:无示例 |
[edit] Defect reports
以下行为更改缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
LWG 3825 | C++20 | check_arg_id 有一个编译时参数id 检查,但 next_arg_id 没有 |
添加 |
LWG 3975 | C++20 | 允许 basic_format_parse_context 的用户特化 |
不允许 |