Spec-Zone.ru › C++

std::basic_format_string, std::format_string, std::wformat_string

Определено в заголовке <format>
template< class CharT, class... Args >
struct basic_format_string;
(1) (с C++20)
template< class... Args >
using format_string = basic_format_string<char, std::type_identity_t<Args>...>;
(2) (с C++20)
template< class... Args >
using wformat_string = basic_format_string<wchar_t, std::type_identity_t<Args>...>;
(3) (с C++20)

Шаблон класса std::basic_format_string оборачивает std::basic_string_view, который будет использоваться функциями форматирования.

Он выполняет проверки строки форматирования во время компиляции при создании только если аргумент конструктора не возвращается std::runtime_format(с C++26).

Члены

(конструктор)
создаёт basic_format_string, вызывая ошибку компиляции, если аргумент не является строкой форматирования
(публичный член-функция)
get
возвращает обернутую строку
(публичный член-функция)

std::basic_format_string::basic_format_string

template< class T >
consteval basic_format_string( const T& s );
(1)
basic_format_string( /*runtime-format-string*/<CharT> s ) noexcept;
(2) (с C++26)
1) Создаёт объект basic_format_string, который хранит представление строки s. Если аргумент не является константой времени компиляции или не может быть распарсен как строка форматирования для типов аргументов форматирования Args, создание объекта будет некорректным.
  • Этот перегруз участвует в разрешении перегрузки только если const T& является моделью std::convertible_to<std::basic_string_view<CharT>>.
2) Создаёт объект basic_format_string, который хранит представление строки s возвращённой std::runtime_format. Он не выполняет проверки строки форматирования при создании.

Параметры

s - объект, представляющий строку форматирования. Строка форматирования состоит из
  • обычных символов (кроме { и }), которые копируются без изменений в выходные данные,
  • последовательностей экранирования {{ и }}, которые заменяются на { и } соответственно в выходных данных, и
  • полей замены.

Каждое поле замены имеет следующий формат:

{ arg-id (необязательно) } (1)
{ arg-id (необязательно) : format-spec } (2)
1) поле замены без спецификации форматирования 2) поле замены со спецификацией форматирования
arg-id - указывает индекс аргумента в args, значение которого используется для форматирования; если он опущен, аргументы используются в порядке следования.

arg-id в строке форматирования должны либо все быть указаны, либо все быть опущены. Смешение ручного и автоматического индексирования является ошибкой.

format-spec - спецификация форматирования, определённая специализацией std::formatter для соответствующего аргумента.
  • Для базовых типов и стандартных типов строк спецификация форматирования интерпретируется как стандартная спецификация форматирования.
  • Для типов chrono спецификация форматирования интерпретируется как спецификация форматирования chrono.
  • Для типов диапазонов спецификация форматирования интерпретируется как спецификация форматирования диапазонов.
  • Для std::pair и std::tuple, спецификация форматирования интерпретируется как спецификация форматирования кортежей.
  • Для std::thread::id и std::stacktrace_entry, см. спецификацию форматирования идентификатора потока и спецификацию форматирования записи стека вызовов.
  • Для std::basic_stacktrace не разрешены спецификации форматирования.
(с C++23)
  • Для других форматируемых типов спецификация форматирования определяется специализациями formatter.

std::basic_format_string::get

constexpr std::basic_string_view<CharT> get() const noexcept;

Возвращает сохранённое представление строки.

Примечания

Псевдонимы шаблонов format_string и wformat_string используют std::type_identity_t для предотвращения вывода аргументов шаблона. Обычно, когда они появляются в качестве параметра функции, их аргументы шаблона выводятся из других аргументов функции.

template< class... Args >
std::string format( std::format_string<Args...> fmt, Args&&... args );
 
auto s = format("{} {}", 1.0, 2);
// Calls format<double, int>. Args are deduced from 1.0, 2
// Due to the use of type_identity_t in format_string, template argument deduction
// does not consider the type of the format string.

Пример

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применено к Поведение, опубликованное Корректное поведение
P2508R1 C++20 нет видимого пользователю имени для этой возможности имя basic_format_string экспонируется

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/format/basic_format_string

Spec-Zone.ru

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