std::basic_format_arg<Context>::handle
Определено в заголовке <format> | ||
|---|---|---|
template< class Context > class basic_format_arg<Context>::handle; | (с C++20) |
Обёртка с типом-стержнем, которая позволяет форматировать объект пользовательского типа.
Объекты handle обычно создаются функциями std::make_format_args и к ним обращаются через функции std::visit_format_arg или visit члена std::basic_format_arg(с C++26).
Члены данных
Типичная реализация handle — TriviallyCopyable и хранит только два нестатических члена данных:
- указатель
const void*на форматируемый объект, и - указатель на функцию
void (*)(std::basic_format_parse_context<Context::char_type>&, Context&, const void*), выполняющую необходимые операции в функции-членеformat(см. ниже).
Члены-функции
| format
(C++20) | форматирует ссылку на объект с заданными контекстами (общедоступная функция-член) |
std::basic_format_arg<Context>::handle::format
void format( std::basic_format_parse_context<Context::char_type>& parse_ctx,
Context& format_ctx ) const;
| (с C++20) |
Пусть
-
T— тип аргумента форматирования, -
TD—std::remove_const_t<T>, -
TQ—const TDеслиconst TDудовлетворяет__formattable_with<Context>, иначеTD, и -
ref— ссылка на аргумент форматирования.
Эквивалентно: typename Context::template formatter_type<TD> f; parse_ctx.advance_to(f.parse(parse_ctx)); format_ctx.advance_to(f.format(const_cast<TQ&>(static_cast<const TD&>(ref)), format_ctx));
Примечания
У handle есть семантика ссылки для форматируемого аргумента и она не продлевает его срок жизни. Программист отвечает за то, чтобы аргумент существовал дольше, чем handle. Обычно handle используется только внутри функций форматирования.
См. также
|
(C++20) | шаблон класса, предоставляющий доступ к аргументу форматирования для пользовательских форматировщиков (шаблон класса) |
|
(C++20)(C++20) | создаёт объект с типом-стержнем, ссылающийся на все аргументы форматирования, преобразуемый в format_args (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/format/basic_format_arg/handle