函数模板实现类型自定义处理

函数模板的基本工作方式:

// fmt 库的核心格式化函数
template <typename T>
auto format(const T& value) {
    // 编译器会根据 T 的实际类型生成不同的代码
}

当你在代码中写 fmt::print("{}", my_object) 时,编译器会:

  1. 推导类型:T 被推导为 MyClass
  2. 实例化模板:生成一个专门处理 MyClass 的 format 函数
  3. 匹配特化:如果存在针对 MyClass 的特化版本,使用它

fmt库可以通过模板特化的ADL参数依赖查找来实现自定义的格式化,如果你去fmt/base.h中去搜索format,你就可以找得到接近364处的format关键字,这些format都是为了让fmt这个格式化引擎通用实现的,能处理几乎所有类型的数据,并且每个细节都可以被精确控制。

这种设计让你可以非常自然和高效地格式化自定义类型,而无需付出运行时类型识别或虚函数调用的开销。