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

1、引言

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

2、模板特化

1)定义模板类型

template 
struct hash{};//#1

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

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

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

3、偏特征模板

1)个数的偏

07 C++模板特化、模板偏特化和模板模板参数基本用法_第1张图片

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

2)范围的偏

07 C++模板特化、模板偏特化和模板模板参数基本用法_第2张图片

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

4、模板模板参数

1)格式

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

2)使用

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


你可能感兴趣的:(02,C++)