模板的全特化和偏特化
模板使用,对于某些特定类型,有更好的实现。
全特化
- 类
template<typename T1, typename T2> class Widgte{ public: T1 m; T2 m2; }; template<> class Widgte<int, double>{ public: T1 m; T2 m2; };
- 函数
template<typename T1, typename T2> void function(T1 m, T2 m2) {} template<> void function(int m, double m2) {}
特化版本是不需要和主模版的结构保持一致的。
偏特化
将模板中部分模板参数指定为确定的类型。函数模板没有偏特化。
类:
模板参数个数上的偏特化(偏特化默认参数的顺序,从左至右或从右至左甚至随意放置都可以)
template<typename T1, typename T2>
class Widgte{
public:
T1 m;
T2 m2;
};
template<typename T1>
class Widgte<T1, double>{
public:
T1 m;
double m2;
};
模板参数范围上的偏特化
template<typename T1>
class Widgte{
public:
T1 m;
T2 m2;
};
template<typename T1>
class Widgte<T1*>{
public:
T1 m;
double m2;
};
特化模板类的标志就是类名后加<>。