特化分为两种:偏特化(又称局部特化)、全特化。
什么是特化?
(在使用模板时我们要给模板指定具体响应类型。当我们传入响应类型的时候,模板生成的类是我们指定类型所对应的类。)有时候我们需要传入的参数是普通参数时用普通的模板类,当参数是特殊地参数时需要特殊处理,要走特殊类型对应的模板类,这就是特化。
偏特化有两种方式,一种是指定部分模板参数;另一种是对全部的模板参数做出修饰;函数没有偏特化,如果真要实现与偏特化相同的功能,请考虑函数重载。
全特化指的是在类(函数)模板的基础上,再重新定义一个类(函数),该类(函数)与类(函数)模板的内容完全一致,唯一的区别是指定了类(函数)模板的所有类型。
顾名思义,偏特化就是对部分进行了特化,全特化就是将全部进行特化。
#include<iostream>
#include<string>
using namespace std;
/*********************************
* 类模板的偏特化和全特化 *
*********************************/
template <typename T>
class Test
{
public:
Test() {
cout<<" class Test"<<endl;}
};
//偏特化比较复杂
//偏特化
template <typename T>
class Test<T*>
{
public:
Test() {
cout<<"偏特化 class Test<T*>"<<endl;}
};
template <typename T>
class Test<T&>
{
public:
Test() {
cout<<"偏特化 class Test<T&>"<<endl;}
};
//全特化
//<>里面是空的,因为全特化已经指定了所有的类型了。
template <>
class Test<int