在以下示例中:
template <class T, int n>
class MyContainer{
public:
T myArray[size];
int size;
MyContainer() : size(n){}
};
// full or partial specialization?
template <int n>
class MyContainer <double, n>{
public:
double myArray[n];
int size;
MyContainer() : size(n){}
double sum();
double average();
};
我刚开始学习全部和部分模板专业化,这让我感到困惑。一般来说,我会说这是一个完整的模板专业化,因为参数T被定义为double,并且没有剩下其他形式参数。但是,我不确定参数 n 在这里是否有任何区别?
答案 0 :(得分:3)
是的,在template parameter list中的所有参数都已被专门化/指定之前,它不是一个完整的专业化,例如。
template <>
class MyContainer <double, 4> { // Full specialization
....
template <int n>
class MyContainer <double, n> { // Partial specialization
....
template <class T, int n> // Partial specialization (adds something to the base template parameter list: '*')
class MyContainer<T*,n> {
....
如果模板参数是类型或非类型,则无关紧要,如果您没有专门化列表中的所有参数,那么您将无法获得完整的专业化。
答案 1 :(得分:-1)
除非所有模板参数都已专门化,否则它不是完整的专业化。
template <>
引入了完整的专业化。