Namensräume
Varianten
Aktionen

std::basic_format_arg<Context>::handle

Von cppreference.com
 
 
 
 
Definiert in Header <format>
template< class Context >
class basic_format_arg<Context>::handle;
(seit C++20)

Ein typerased Wrapper, der die Formatierung eines Objekts eines benutzerdefinierten Typs ermöglicht.

handle-Objekte werden typischerweise von std::make_format_args erstellt und durch std::visit_format_arg oder die visit-Memberfunktionen von std::basic_format_arg(seit C++26) zugegriffen.

Inhalt

[edit] Datenmember

Eine typische Implementierung von handle ist TriviallyCopyable und speichert nur zwei nicht-statische Datenmember:

  • ein const void*-Zeiger auf das zu formatierende Objekt, und
  • ein void (*)(std::basic_format_parse_context<Context::char_type>&, Context&, const void*)-Funktionszeiger auf die Funktion, die die in der format-Memberfunktion benötigten Operationen durchführt (siehe unten).

[edit] Memberfunktionen

format
(C++20)
formatiert das referenzierte Objekt mit den gegebenen Kontexten
(öffentliche Memberfunktion)

std::basic_format_arg<Context>::handle::format

void format( std::basic_format_parse_context<Context::char_type>& parse_ctx,
             Context& format_ctx ) const;
(seit C++20)

Seien

  • T sei der Typ des Formatierungsarguments,
  • TD sei std::remove_const_t<T>,
  • TQ sei const TD, wenn const TD __formattable_with<Context> erfüllt, oder TD andernfalls, und
  • ref sei eine Referenz auf das Formatierungsargument.

Äquivalent zu: 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));

[edit] Hinweise

Ein handle hat Referenzsemantik für das formatierte Argument und verlängert dessen Lebensdauer nicht. Es liegt in der Verantwortung des Programmierers sicherzustellen, dass das Argument den handle überlebt. Normalerweise wird ein handle nur innerhalb von Formatierungsfunktionen verwendet.

[edit] Siehe auch

Klassentemplate, das den Zugriff auf ein Formatierungsargument für benutzerdefinierte Formatierer ermöglicht
(Klassentemplate) [bearbeiten]
erstellt ein typ-erased Objekt, das auf alle Formatierungsargumente verweist und in format_args konvertierbar ist
(Funktionstemplate) [bearbeiten]