◐ Shell
clean mode source ↗

std::basic_format_parse_context — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

Определено в заголовочном файле <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 из строки формата и количества аргументов
(public функция-элемент)

operator=

[удалено]

std::basic_format_parse_context не копируется
(public функция-элемент)

begin

возвращает итератор на начало диапазона строки формата
(public функция-элемент)

end

возвращает итератор на конец диапазона строки формата
(public функция-элемент)

advance_to

перемещает начальный итератор на заданную позицию
(public функция-элемент)

next_arg_id

переходит в режим автоматического индексирования и возвращает индекс следующего аргумента
(public функция-элемент)

check_arg_id

переходит в режим ручной индексации, проверяет, находится ли указанный индекс аргумента в диапазоне
(public функция-элемент)

std::basic_format_parse_context::basic_format_parse_context

<tbody> </tbody>

constexpr explicit basic_format_parse_context( std::basic_string_view<CharT> fmt, std::size_t num_args = 0 ) noexcept;

(1)

basic_format_parse_context( const basic_format_parse_context& ) = delete;

(2)

1) Создаёт экземпляр std::basic_format_parse_context. Инициализирует диапазон строк формата в [fmt.begin()fmt.end()) и счётчик аргументов в num_args.

2) Конструктор копирования удалён. std::basic_format_parse_context нельзя копировать.

std::basic_format_parse_context::begin

<tbody> </tbody>

constexpr const_iterator begin() const noexcept;

Возвращает итератор на начала диапазона строки формата.

std::basic_format_parse_context::end

<tbody> </tbody>

constexpr const_iterator end() const noexcept;

Возвращает итератор на конец диапазона строки формата.

std::basic_format_parse_context::advance_to

<tbody> </tbody>

constexpr void advance_to( const_iterator it );

Устанавливает начало диапазона строки формата в it. После вызова advance_to() последующие вызовы begin() вернут копию it.

Поведение не определено, если end() недостижим из it.

std::basic_format_parse_context::next_arg_id

<tbody> </tbody>

constexpr std::size_t next_arg_id();

Переходит в режим автоматического индексирования аргументов и возвращает индекс следующего аргумента, начиная с 0.

Если *this уже перешёл в режим индексации аргументов вручную, генерируется std::format_error.

Если индекс следующего аргумента больше или равен значению num_args, указанному в конструкторе, вызов не является базовым константным выражением.

std::basic_format_parse_context::check_arg_id

<tbody> </tbody>

constexpr void check_arg_id( std::size_t id );

Входит в режим индексации аргументов вручную.

Если *this уже перешёл в режим автоматической индексации аргументов, генерируется std::format_error.

Если id больше или равно num_args, указанному в конструкторе, вызов не является базовым константным выражением.

Пример

Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 3825 C++20 check_arg_id имеет проверку аргумента id времени компиляции,
но next_arg_id не имеет
добавлено