Spec-Zone.ru › C++

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 используется только внутри функций форматирования.

См. также

basic_format_arg
(C++20)
шаблон класса, предоставляющий доступ к аргументу форматирования для пользовательских форматировщиков
(шаблон класса)
make_format_argsmake_wformat_args
(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

Spec-Zone.ru

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