模板偏特化为模板提供特殊的实现,针对特定的模板参数或参数组合。
在模板全特化,所有的模板参数都被指定了具体的类型。
我们可以在泛化设计中提供一个特化版本,针对其中某个或者数个模板参数进行特化,我们可以指定一部分模板参数的具体类型,或对模板参数施加一些约束条件。
模板偏特化能够让模板根据不同类型做出不同行为决策的通用代码。
假设有一个类模板,有两个模板参数。
template <typename T1, typename T2>
class MyTemplate {// 通用实现
};
假设当第二个模板参数是int
类型时,我们希望有一个特殊的实现。这时,可以使用模板偏特化来实现
template <typename T1>
class MyTemplate<T1, int> {// 针对第二个模板参数为int类型的特殊实现
};
- 模板偏特化只能用于类模板,不能用于函数模板。函数模板的重载和特化遵循不同的规则。
- 当存在多个匹配的偏特化时,编译器会根据最具体的匹配规则选择一个实现。