Spec-Zone.ru › C++

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)
1) Создаёт экземпляр std::basic_format_parse_context. Инициализирует диапазон строки формата значением [fmt.begin(), fmt.end()), а число аргументов — значением num_args(до C++26)0(начиная с C++26).

Любой вызов next_arg_id, check_arg_id или check_dynamic_spec для экземпляра std::basic_format_parse_context, инициализированного с помощью этого конструктора, не является основным константным выражением.

(начиная с 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.

Поведение не определено, если 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API