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* 指针,以及
  • 指向进行 format 成员函数(见后述)所需操作的函数的 void (*)(std::basic_format_parse_context<Context::char_type>&, Context&, const void*) 函数指针。

成员函数

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 满足 __formattable_with<Context> 则为 const TD,否则为 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
(函数模板)