cpp模板偏特化

内容简介

偏特化是类模板在“部分模板参数已经确定”时提供的特殊实现。它常用于类型萃取、容器适配、指针类型处理等场景。

函数模板不支持偏特化。函数模板通常用重载、约束或辅助类模板解决类似问题。

主模板

template <typename T>
struct TypeName {
    static const char* value()
    {
        return "unknown";
    }
};

全特化

template <>
struct TypeName<int> {
    static const char* value()
    {
        return "int";
    }
};

偏特化

template <typename T>
struct TypeName<T*> {
    static const char* value()
    {
        return "pointer";
    }
};

TypeName<double*>TypeName<int*> 都会匹配这个偏特化版本。

使用场景

  • 对指针、引用、数组等类型族做统一处理。
  • 编写类型萃取工具。
  • 为模板类的部分参数组合提供特殊实现。

注意事项

  • 类模板支持偏特化,函数模板不支持偏特化。
  • 偏特化匹配规则比普通函数重载更难,基础阶段先掌握常见模式即可。
  • 现代 C++ 中很多场景可以用 if constexpr、concepts 或标准库类型萃取简化。

相关:cpp模板特化与局限性cpp类型萃取cpp模板元编程入门