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

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

  • 说明
  • 头文件
  • 一个简单的format例子
  • 格式化自定义类型(class,struct)
  • 注意事项!!重要!!

说明

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


头文件

#include 

一个简单的format例子

#include 
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 

// 非模板类
struct 

你可能感兴趣的:(C++20,c++,编程语言)