这是课程模板的全部或部分专业化吗?

时间:2014-08-14 12:40:26

标签: 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 myArray[n];
    int size;
    MyContainer() : size(n){}
    double sum();
    double average();
};

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

2 个答案:

答案 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 <>引入了完整的专业化。