名稱空間
變體
操作

std::basic_format_parse_context

來自 cppreference.com
< cpp‎ | utility‎ | format
 
 
 
格式化庫
標準格式規範
格式化函式
(C++20)
(C++20)
(C++20)
(C++20)
格式字串
格式化概念
Formatter
(C++20)
basic_format_parse_contextformat_parse_contextwformat_parse_context
(C++20)(C++20)(C++20)
格式化引數
(C++20) (在 C++26 中廢棄)
格式錯誤
 
定義於標頭檔案 <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,

                            std::size_t num_args = 0 ) noexcept;
(直到 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)
1) 構造 `std::basic_format_parse_context` 例項。將格式字串範圍初始化為 [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 起)
2) 複製建構函式已被刪除。`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 的副本。

如果從 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) >= 1Ts... 中的型別是唯一的,並且每個型別都是 boolchar_typeintunsigned intlong long intunsigned long long intfloatdoublelong doubleconst 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 已停用