C++20 std::formatter的使用--格式化自定义类型

C++20引入的format库提供了强大的格式化能力,本文详细介绍了如何为自定义的class和struct特化std::formatter,通过实例展示了特化过程,并强调了特化 formatter 的注意事项,包括是否需要继承内置类型格式化器及其原因。
摘要由CSDN通过智能技术生成

说明

C++在20标准中正式引入格式化库format,其来自第三方库fmt::format。


头文件

#include <format>

一个简单的format例子

#include <format>
int main()
{
   
	std::cout << std::format("this {} a {} example\n", "is", "simple");
	std::cout << std::format("this {0} a {1} example\n", "is", "simple");
	std::cout << std::format("this {1} a {0} example\n", "simple", "is");
}

使用方法和python的format是一样的,有关标准格式的说明可以查看std::formatter-cppreference
做此文主要就是国内互联网上对于formatter的特化讲解少之又少,反正我是找不到,
cppreference中又只有一个很简单的特化一个泛型类的例子,所以发布此文章一起学习交流。
下面我们进入本文主题——特化格式化器formatter,输出自定义类型变量

格式化自定义类型(class,struct)

在引入format之前,我们输出一个自定义类型都是通过重载std::ostream& operator<<(std::ostream&, const custom_type&)来输出自己的类
在引入了format之后,那我们就有时候会需要这样输出我们的类

struct Box {
   
	int int_value;
	const char* str;
}
int main()
{
   
	Box a {
   
		.int_value = 1;
		.str = "Box"
	};
	std::cout << std::format("a = {}", a);
}

在format里,已经提供了语言内置类型的formatter特化,所以我们可以直接std::cout << std:format("{}", 1)这样使用,但对于上述的Box类,则需要自己提供formatter的特化来格式化Box。直接看代码

#include <format>

// 非模板类
struct 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值