C++模板特化与部分特化(偏特化)

2023-11-12

模板即是对类型的一种泛化,当我们的模板对某种特定类型有特定的实现时,模板特化即是一个很好的解决方案。

一、模板特化

template<typename T>
class sample { ... };//泛化模板类


template <>
class sample<int> { ... };//模板特化,可以理解为泛化的类型被从template中抽出来绑定为int了

上述特化即表示当类型为int时,有一套和其他类型不同的处理方案,而除int以外的其他类型则由上面的泛化模板生成定义。

二、部分特化

除了全部特化,模板还可以部分特化,而部分特化又可分为个数部分特化和范围部分特化

1.个数部分特化(模板参数的个数)

template<typename T, typename Alloc = alloc>
class vector{ ... };

template<typename Alloc>
class vector<bool, Alloc> { ... };//表示当bool存储的类型为bool时,vector有另一套实例化方案
//这很正常,通常这种特化是为了提高效率(或是泛化模板不符合要求),比如特化采用1bit来存储bool值
//而不是用int来存储

2.范围部分特化

template<typename T>
class example { ... };

templace<typename T>
class example<T*> { ... };//指定当T为指针时,使用特化的模板来实例化,而对于指针指向何种类型
//不做限定,由于T指向的类型任意,只是当T为指针时才特化,所以不能从template里将T抽出来

template<typename T>
class example<const T*> { ... };//当T为const *时才特化

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++模板特化与部分特化(偏特化) 的相关文章

随机推荐