Namespaces
Variants

std:: basic_format_parse_context

From cppreference.net
Определено в заголовочном файле <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

Функции-члены

(constructor)
создает экземпляр std::basic_format_parse_context из строки формата и количества аргументов
(public member function)
operator=
[deleted]
std::basic_format_parse_context не копируется
(public member function)
begin
возвращает итератор на начало диапазона строки формата
(public member function)
end
возвращает итератор на конец диапазона строки формата
(public member function)
advance_to
перемещает начальный итератор в заданную позицию
(public member function)
next_arg_id
переходит в режим автоматической индексации и возвращает следующий индекс аргумента
(public member function)
check_arg_id
переходит в режим ручной индексации, проверяет, находится ли заданный индекс аргумента в допустимом диапазоне
(public member function)
check_dynamic_spec
(C++26)
проверяет, находится ли тип соответствующего аргумента формата с заданным индексом среди заданных шаблонных аргументов типов
(public member function)
check_dynamic_spec_integral
(C++26)
проверяет, является ли тип соответствующего аргумента формата с заданным индексом целочисленным типом
(public member function)
check_dynamic_spec_string
(C++26)
проверяет, является ли тип соответствующего аргумента формата с заданным индексом строковым типом
(public member function)

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 ;
(until C++26)
constexpr explicit
basic_format_parse_context ( std:: basic_string_view < CharT > fmt ) noexcept ;
(since 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 ;
(since 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++.

DR Applied to Behavior as published Correct behavior
LWG 3825 C++20 check_arg_id имеет проверку аргумента
id во время компиляции, но next_arg_id не имел
добавлено
LWG 3975 C++20 пользовательская специализация basic_format_parse_context была разрешена запрещено