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) |
форматирует ссылаемый объект с заданными контекстами (public функция-элемент) |
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 (шаблон функции) |