这是模板专业化吗?

时间:2013-03-02 09:19:12

标签: c++ templates

template <int parameter> class MyClass

以上是模板专业化吗?我不这么认为,但我不确定它,我不知道模板可以接收参数作为函数..他们的参数在哪里存储?

2 个答案:

答案 0 :(得分:3)

模板参数不一定需要是类型名称:它们也可以是数字。例如,std::array为数组大小采用size_t类型的参数。

在您的情况下,类模板采用类型为int的参数,这完全没问题。以下是如何使用此类参数的示例:

template <int param> struct MyClass {
    int array[param]; // param is a compile-time constant.
};
int main() {
    MyClass<5> m;
    m.array[3] = 8; // indexes 0..4 are allowed.
    return 0;
}

答案 1 :(得分:1)

他们的参数存储在他们的类型信息中。

不,这不是模板专业化。看看这个:

template <int, int> class MyClass;         // <-- primary template
template <int>      class MyClass<int, 4>; // <-- partial specialization
template <>         class MyClass<5, 4>;   // <-- specialization