std::basic_format_arg<Context>::handle
来自 cppreference.com
< cpp | utility | format | basic format arg
在头文件 <format> 中定义 |
||
template< class Context > class basic_format_arg<Context>::handle; |
(自 C++20 起) | |
一个类型擦除包装器,允许格式化用户定义类型的对象。
handle
对象通常由 std::make_format_args 创建,并通过 std::visit_format_arg 或 std::basic_format_arg 的 visit
成员函数(自 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 (函数模板) |