Пространства имён
Варианты
Действия

std::basic_format_arg<Context>::handle

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Библиотека форматирования
Функции форматирования
(C++20)
(C++20)
(C++20)
(C++20)
Концепты форматирования
Форматировщик
(C++20)
Аргументы форматирования
basic_format_arg::handle
(C++20)
(C++20) (устарело в C++26)
Ошибка формата
 
Определено в заголовочном файле <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 используется только в функциях форматирования.

[править] Смотрите также

шаблонный класс, который предоставляет доступ к аргументу форматирования для определяемых пользователем средств форматирования
(шаблон класса) [править]
создаёт объект с удалением типа, ссылающийся на все аргументы форматирования, конвертируемый в format_args
(шаблон функции) [править]