模板化vs模板特化vs模板偏特化
编译器在编译阶段进行匹配时,抉择顺序:模板偏特化>模板特化>模板化
- 代码直观
//模板化
template <typename T>
class CTemplate
{
public:
CTemplate()
{
std::cout << "一般模板" << std::endl;
}
};
//模板特化
template <>
class CTemplate<double>
{
public:
CTemplate()
{
std::cout << "模板特化" << std::endl;
}
};
//模板偏特化 主要是原生指针类型、常指针类型
template <typename T>
class CTemplate <T* >
{
public:
CTemplate()
{
std::cout << "模板偏特化" << std::endl;
}
};
void TestTemplate()
{
CTemplate<int> obj1;
CTemplate<double> obj2;
CTemplate<double* > obj3;
}