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(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(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<const CharT&>.
Поведение не определено, если OutputIt не моделирует (не отвечает семантическим требованиям) концепт std::output_iterator<const CharT&> или если std::formatter<Ti, CharT> не соответствует требованиям BasicFormatter для любого Ti в Args (как того требуют std::make_format_args и std::make_wformat_args).
Параметры
| out | — | итератор выходного буфера | ||||||||||||||||||||||||||||||||||||||||||
| fmt | — |
Каждое поле замены имеет следующий формат:
1) поле замены без указания формата
2) поле замены со спецификацией формата
| ||||||||||||||||||||||||||||||||||||||||||
| args... | — | аргументы для форматирования | ||||||||||||||||||||||||||||||||||||||||||
| loc | — | std::locale используется для форматирования, зависящего от локали | ||||||||||||||||||||||||||||||||||||||||||
Возвращаемое значение
Итератор за концом выходного диапазона.
Исключения
Распространяет любые исключения, возникающие в результате операций форматирования или итерирования.
Примечание
Начиная с P2216R3, если строка формата не является константным выражением, это ошибка. В этом случае можно использовать std::vformat_to.
Пример
#include <format>
#include <iostream>
#include <iterator>
#include <string>
auto main() -> int
{
std::string buffer;
std::format_to(
std::back_inserter(buffer), //< OutputIt
"Привет, C++{}!\n", //< fmt
"20"); //< аргумент
std::cout << buffer;
buffer.clear();
std::format_to(
std::back_inserter(buffer), //< OutputIt
"Привет, {0}::{1}!{2}", //< fmt
"std", //< аргумент {0}
"format_to()", //< аргумент {1}
"\n", //< аргумент {2}
"дополнительный параметр(ы)..."); //< не используется
std::cout << buffer;
std::wstring wbuffer;
std::format_to(
std::back_inserter(wbuffer),//< OutputIt
L"Привет, {2}::{1}!{0}", //< fmt
L"\n", //< аргумент {0}
L"format_to()", //< аргумент {1}
L"std", //< аргумент {2}
L"...это не..." //< не используется
L"...ошибка!"); //< не используется
std::wcout << wbuffer;
}
Вывод:
Привет, C++20!
Привет, std::format_to()!
Привет, std::format_to()!
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| WG не указан | C++20 | генерирует std::format_error для неверной строки формата | неверная строка формата приводит к ошибке времени компиляции |
| WG не указан | C++20 | объекты, которые не являются ни константными, ни копируемыми (например, объекты, подобные генераторам), не форматируются |
разрешено форматирование этих объектов |
| WG не указан | C++20 | для этого средства нет видимого пользователем имени | представлено имя basic_format_string
|
Смотрите также
(C++20) |
сохраняет форматированное представление аргументов в новой строке (шаблон функции) |
(C++20) |
записывает форматированное представление своих аргументов через итератор вывода, не превышая заданного размера (шаблон функции) |