07 C++模板特化、模板偏特化和模板模板参数基本用法

1、引言

C++中对类模板、函数模板、成员模板除了通用的方法外,还有模板特化specialization、偏特化partial specialization和模板模板参数template template parameter的用法,具体用如下示例解释。

2、模板特化

1)定义模板类型

template <typename T>
struct hash{};//#1

template <>
struct hash<char>{ };//#2

template <>
struct hash<int>{ }; //#3
说明:声明了hash类的三个模板,其中第一个模板为泛化模板,第二、三模板为特化模板,模板使用会根据不用的声明来调用。
2)使用模板

hash<int> iHash; 
说明:iHash会调用模板中#3模板来执行。

3、偏特征模板

1)个数的偏

说明:在原模板中,是有两个模板参数,使用偏特征模板后,固定一个参数,剩下一个模板参数。

2)范围的偏

说明:如上图定义一个泛化模板和一个指针模板,如当声明string类型后,调用泛化模板;当声明string*类型后,调用偏特化的模板。

4、模板模板参数

1)格式

template <typename T, template <typename T> class SmartPtr>
class XCLs
{
private:
	SmartPtr<T> SP;
public:
	XCLs() :SP(new T){ }
};

2)使用

XCLs<string, shared_ptr> p1;
说明:在模板中定义模板模板参数SmartPtr,表示可以传递T类型参数的类。在使用时,用智能指针模板shared_ptr为例,进行类XCLs的声明。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值