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` 的顯式或部分特化的程式是病態的,無需診斷。
提供了用於常見字元型別的幾個 typedef
定義於標頭檔案
<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 |
將起始迭代器推進到給定位置 (公開成員函式) |
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) | |
[
fmt.begin(),
fmt.end())
,並將引數計數初始化為 num_args(直到 C++26)0(從 C++26 起)。
使用此建構函式初始化的 `std::basic_format_parse_context` 例項的任何 `next_arg_id`、`check_arg_id` 或 `check_dynamic_spec` 呼叫都不是核心常量表達式。 |
(C++26 起) |
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 的副本。
如果從 it 無法 到達 end(),則行為未定義。
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 的呼叫在執行時沒有效果。
除非 sizeof...(Ts) >= 1,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 的呼叫在執行時沒有效果。
[編輯] 示例
本節不完整 原因:無示例 |
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 3825 | C++20 | check_arg_id 具有編譯時引數id 檢查,但 next_arg_id 沒有 |
已新增 |
LWG 3975 | C++20 | 允許使用者特化 basic_format_parse_context |
已停用 |