Spec-Zone.ru › C++

std::runtime_format

Определено в заголовке <format>
/*runtime-format-string*/<char> runtime_format( std::string_view fmt ) noexcept;
(1) (с C++26)
/*runtime-format-string*/<wchar_t> runtime_format( std::wstring_view fmt ) noexcept;
(2) (с C++26)

Возвращает объект, который хранит строку формата выполнения, напрямую пригодную для использования в функциях форматирования, ориентированных на пользователя, и может быть неявно преобразован в std::basic_format_string.

1,2) Эквивалентно return fmt;.

Параметры

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

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

{ 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 специализациями.

Значение результата

Объект, содержащий строку формата выполнения типа:

Шаблон класса runtime-format-string <CharT>

template< class CharT >
struct /*runtime-format-string*/;
(только для иллюстрации*)

Члены-объекты

Возвращаемый объект содержит член-объект str экспонируемого типа std::basic_string_view<CharT>.

Конструкторы и присваивания

/*runtime-format-string*/( std::basic_string_view<CharT> s ) noexcept;
(1)
/*runtime-format-string*/( const /*runtime-format-string*/& ) = delete;
(2)
/*runtime-format-string*/& operator=( const /*runtime-format-string*/& ) = delete;
(3)
1) Инициализирует str значением s.
2) Конструктор копирования явным образом удален. Тип не копируемый и не перемещаемый.
3) Операция присваивания явным образом удалена.

Примечания

Поскольку возвращаемый тип runtime_format не копируемый и не перемещаемый, попытка передачи runtime_fmt как glvalue препятствует созданию std::basic_format_string, что приводит к некорректной программе. Для создания std::basic_format_string со значением runtime_format, возвращаемое значение runtime_format передается непосредственно std::basic_format_string в качестве правого значения, где гарантировано удаление копирования.

auto runtime_fmt = std::runtime_format("{}");
 
auto s0 = std::format(runtime_fmt, 1); // error
auto s1 = std::format(std::move(runtime_fmt), 1); // still error
auto s2 = std::format(std::runtime_format("{}"), 1); // ok
Тестовое макрос для поддержки функции Значение Стандарт Функция
__cpp_lib_format 202311L (C++26) Строки формата выполнения

Пример

#include <format>
#include <print>
#include <string>
#include <string_view>
 
int main()
{
    std::print("Hello {}!\n", "world");
 
    std::string fmt;
    for (int i{}; i != 3; ++i)
    {
        fmt += "{} "; // constructs the formatting string
        std::print("{} : ", fmt);
        std::println(std::runtime_format(fmt), "alpha", 'Z', 3.14, "unused");
    }
}

Вывод:

Hello world!
{}  : alpha
{} {}  : alpha Z
{} {} {}  : alpha Z 3.14

См. также

format
(C++20)
сохраняет отформатированное представление аргументов в новой строке
(шаблон функции)
vformat
(C++20)
нешаблонный вариант std::format с использованием представления аргументов типа erase
(функция)
basic_format_stringformat_stringwformat_string
(C++20)(C++20)(C++20)
шаблон класса, выполняющий проверку строки формата во время компиляции при создании
(шаблон класса)

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

Spec-Zone.ru

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