目录
第一种偏特化
第二种偏特化
这里只讨论类的偏特化
第一种偏特化
template <class A, class B>
class foo
{
A a;
B b;
};
template <class A, int>
class foo<A, int>
{
A a;
int b;
}
第二种偏特化
模板参数从值推广到指针、引用:
注意,偏特化前面一定要有非特化的模板,否则编译失败
#include <iostream>
#include<type_traits>
template <class A>
class bar
{
public:
A a;
};
template <class A>//注意,如果没有前面的第一个模板,仅仅第二个模板是无法编译通过的
class bar<A *>
{
public:
A a;
};
template <class A>//注意,如果没有前面的第一个模板,仅仅第3个模板是无法编译通过的
class bar<A &>
{
public:
A a;
};
int main(void)
{
bar<int> p;//第一个模板
bar<int *> q;//第二个模板
std::cout<<"p.a is:"<<std::is_same<int, decltype(p.a)>::value<<std::endl;
std::cout<<"q.a is:"<<std::is_same<int ,decltype(q.a)>::value<<std::endl;
return 0;
}
结果: