函数模板实现类型自定义处理
函数模板的基本工作方式:
// fmt 库的核心格式化函数
template <typename T>
auto format(const T& value) {
// 编译器会根据 T 的实际类型生成不同的代码
}
当你在代码中写 fmt::print("{}", my_object) 时,编译器会:
- 推导类型:
T被推导为MyClass - 实例化模板:生成一个专门处理
MyClass的format函数 - 匹配特化:如果存在针对
MyClass的特化版本,使用它
fmt库可以通过模板特化的ADL参数依赖查找来实现自定义的格式化,如果你去fmt/base.h中去搜索format,你就可以找得到接近364处的format关键字,这些format都是为了让fmt这个格式化引擎通用实现的,能处理几乎所有类型的数据,并且每个细节都可以被精确控制。
这种设计让你可以非常自然和高效地格式化自定义类型,而无需付出运行时类型识别或虚函数调用的开销。