std::basic_format_parse_context
Определено в заголовке <format> | ||
|---|---|---|
template< class CharT > class basic_format_parse_context; | (с C++20) |
Обеспечивает доступ к состоянию разбора строки формата, состоящему из диапазона строки формата, которая разбирается, и счётчика аргументов для автоматической индексации.
Экземпляр std::basic_format_parse_context передаётся в Formatter при разборе спецификации формата.
Предоставляются несколько определений типов для общих типов символов:
Определено в заголовке <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,
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) |
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 не имеет эффекта во время выполнения.
Пример
Отчеты об ошибках
Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| LWG 3825 | C++20 |
check_arg_id имеет аргумент на этапе компиляцииid проверка, но next_arg_id не имела | добавлено |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/format/basic_format_parse_context