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 | перемещает начальный итератор в указанную позицию (открытая функция-член) |
|
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
constexpr explicit
basic_format_parse_context( std::basic_string_view<CharT> fmt,
std::size_t num_args = 0 ) noexcept;
| (1) | (до 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 не оказывает влияния во время выполнения.
Программа некорректна, если 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 была разрешена | запрещена |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/format/basic_format_parse_context