C++ 这是类模板的完全专门化还是部分专门化?

C++ 这是类模板的完全专门化还是部分专门化?,c++,class,templates,template-specialization,C++,Class,Templates,Template Specialization,在以下示例中: 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 m

在以下示例中:

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 myArray[大小];
整数大小;
MyContainer():大小(n){}
};
//完全专业化还是部分专业化?
模板
类霉菌容器{
公众:
双myArray[n];
整数大小;
MyContainer():大小(n){}
双和();
双倍平均数();
};

我刚开始学习全部和部分模板专业化,这让我有点困惑。通常,我会说这是一个完整的模板专门化,因为参数T被定义为double,并且没有其他形式参数。但是,我不确定参数n在这里是否有任何区别?

除非所有模板参数都已专门化,否则它不是完全专门化


模板
引入了完全专门化。

是的,在对中的所有参数进行专门化/指定之前,它不是完全专门化,例如

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> {
....
模板
类MyContainer{//完全专门化
....
模板
类MyContainer{//部分专门化
....
模板//部分专门化(将某些内容添加到基本模板参数列表:'*'))
类霉菌容器{
....

无论模板参数是类型还是非类型,如果不专门化列表中的所有参数,则不会进行完全专门化。

是的,在模板参数列表中的所有参数都被专门化/指定之前,它不是完全专门化。如果是类型,则为完全专门化;如果是类型,则为完全专门化模板,它是部分专门化。因此,如果我删除int n,那么它将是完全模板专门化?部分。提示,完全专门化将看起来是
模板
,即所有参数都已专门化。