命名空间
变体
操作

std::basic_format_arg<Context>::handle

来自 cppreference.com
 
 
工具库
语言支持
类型支持 (基本类型, RTTI)
库功能测试宏 (C++20)
动态内存管理
程序工具
协程支持 (C++20)
可变参数函数
调试支持
(C++26)
三元比较
(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)

 
 
在头文件 <format> 中定义
template< class Context >
class basic_format_arg<Context>::handle;
(自 C++20 起)

一个类型擦除包装器,允许格式化用户定义类型的对象。

handle 对象通常由 std::make_format_args 创建,并通过 std::visit_format_argstd::basic_format_argvisit 成员函数(自 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 是格式化参数的类型,
  • TDstd::remove_const_t<T>
  • TQconst 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
(函数模板) [编辑]