partial specialization,模板偏特化
一、模板偏特化——个数的偏
1、概念说明
一个类模板它有两个以上的模板参数列表,我们写一个版本指定它某个参数为一个特定的类型,其余参数保持泛型。
2、示例代码
template<typename T1, typename T2>
class testPartialSpecialization
{
public:
testPartialSpecialization() : t1(T1()), t2(T2()) { cout << "template<typename T1, typename T2>\n"; }
T1 get_t1() const { return t1; }
T2 get_t2() const { return t2; }
private:
T1 t1;
T2 t2;
};
template<typename T>
class testPartialSpecialization<int, T>
{
public:
testPartialSpecialization() : t1(int()), t2(T()) { cout << "template<typename T>\n"; }
int get_t1() const { return t1; }
T get_t2() const { return t2; }
private:
int t1;
T t2;
};
void test_partial_specialization()
{
testPartialSpecialization<int, int> a; //template<typename T>
testPartialSpecialization<int, double> b; //template<typename T>
testPartialSpecialization<char, double> c; //template<typename T1, typename T2>
}
二、模板偏特化——范围的偏
1、概念说明
一个类模板它有一个模板参数T,他能接受所有类型, 我们写出一个只接收指针类型的类模板。这就是模板偏特化的范围的偏。
2、示例代码
template<typename T>
class testPartialSpecialization
{
public:
testPartialSpecialization() { cout << "class testPartialSpecialization\n"; }
T get_t1() const { return m_t; }
private:
T m_t;
};
template<typename T>
class testPartialSpecialization<T*>
{
public:
testPartialSpecialization() { cout << "class testPartialSpecialization<T*>\n"; }
T get_t1() const { return m_t; }
private:
T m_t;
};
void test_partial_specialization()
{
testPartialSpecialization<double> a; //class testPartialSpecialization
testPartialSpecialization<int*> b; //class testPartialSpecialization<T*>
}