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 或标准库类型萃取简化。