std::format_to
Определён в заголовочном файле <format> | ||
|---|---|---|
template< class OutputIt, class... Args >
OutputIt format_to( OutputIt out,
std::format_string<Args...> fmt, Args&&... args );
| (1) | (начиная с C++20) |
template< class OutputIt, class... Args >
OutputIt format_to( OutputIt out,
std::wformat_string<Args...> fmt, Args&&... args );
| (2) | (начиная с C++20) |
template< class OutputIt, class... Args >
OutputIt format_to( OutputIt out, const std::locale& loc,
std::format_string<Args...> fmt, Args&&... args );
| (3) | (начиная с C++20) |
template< class OutputIt, class... Args >
OutputIt format_to( OutputIt out, const std::locale& loc,
std::wformat_string<Args...> fmt, Args&&... args );
| (4) | (начиная с C++20) |
Форматирует args в соответствии со строкой форматирования fmt и записывает результат в выходной итератор out. Если указан, loc используется для форматирования с учётом локали.
Эквивалентно:
return std::vformat_to(std::move(out), fmt.str, std::make_format_args(args...));
return std::vformat_to(std::move(out), fmt.str, std::make_wformat_args(args...));
return std::vformat_to(std::move(out), loc, fmt.str, std::make_format_args(args...));
return std::vformat_to(std::move(out), loc, fmt.str, std::make_wformat_args(args...));.
Пусть CharT — это char для перегрузок (1,3) и wchar_t для перегрузок (2,4).
Эти перегрузки участвуют в разрешении перегрузки, только если OutputIt удовлетворяет концепту std::output_iterator<constCharT&>.
Если выполняется любое из следующих условий, поведение не определено:
-
OutputItне моделирует std::output_iterator<constCharT&>. -
std::formatter<Ti,CharT> не соответствует требованиям BasicFormatter (как того требуют
std::make_format_argsиstd::make_wformat_args) для некоторогоTiизArgs.
Параметры
| out | - | итератор выходного буфера | ||||||||||||||||
| fmt | - | объект, представляющий строку форматирования. Строка форматирования состоит из
Каждое поле подстановки имеет следующий формат:
|
||||||||||||||||
| args... | - | аргументы для форматирования | ||||||||||||||||
| loc | - |
std::locale, используемая для форматирования с учётом локали |
Возвращаемое значение
Итератор за концом выходного диапазона.
Исключения
Передаёт любое исключение, выброшенное форматтером или операциями с итератором.
Примечания
Согласно P2216R3, строка форматирования должна быть константным выражением, иначе возникает ошибка. В этом случае можно использовать std::vformat_to или std::runtime_format(начиная с C++26).
Пример
#include <format>
#include <iostream>
#include <iterator>
#include <string>
int main()
{
std::string buffer;
std::format_to
(
std::back_inserter(buffer), // < OutputIt
"Hello, C++{}!\n", // < fmt
"20" // < arg
);
std::cout << buffer;
buffer.clear();
std::format_to
(
std::back_inserter(buffer), // < OutputIt
"Hello, {0}::{1}!{2}", // < fmt
"std", // < arg {0}
"format_to()", // < arg {1}
"\n", // < arg {2}
"extra param(s)..." // < unused
);
std::cout << buffer << std::flush;
std::wstring wbuffer;
std::format_to
(
std::back_inserter(wbuffer),// < OutputIt
L"Hello, {2}::{1}!{0}", // < fmt
L"\n", // < arg {0}
L"format_to()", // < arg {1}
L"std", // < arg {2}
L"...is not..." // < unused
L"...an error!" // < unused
);
std::wcout << wbuffer;
}
Вывод:
Hello, C++20! Hello, std::format_to()! Hello, std::format_to()!
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применён к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 3539 | C++20 |
out не мог быть перемещаемым итератором | может быть |
| P2216R3 | C++20 | выбрасывает std::format_error для некорректной строки форматирования | вместо этого приводит к ошибке компиляции |
| P2418R2 | C++20 | объекты, которые нельзя использовать как const и которые нельзя копировать (например, объекты, подобные генераторам), не поддерживают форматирование | разрешает форматирование этих объектов |
| P2508R1 | C++20 | для этой возможности не предусмотрено имя, доступное пользователю | становится доступным имя basic_format_string |
См. также
|
(C++20) | сохраняет отформатированное представление аргументов в новой строке (шаблон функции) |
|
(C++20) | записывает отформатированное представление аргументов через выходной итератор, не превышая заданный размер (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/format/format_to