不能专门化struct

时间:2011-04-03 10:56:56

标签: c++ template-specialization

为什么这不起作用?

template <class T>
struct Low;

template <>
struct Low<int> {};//Here I'm trying to specialize for int

int main()
{
Low<1> a;

}

3 个答案:

答案 0 :(得分:5)

Low<int> a;将起作用 - 您的模板采用类型而不是整数参数。

答案 1 :(得分:4)

Low<1> a;

您的班级模板Low需要TYPE,而不是INTEGRAL VALUE!

如果您想使用这种方式,您需要将类模板定义为:

template <int N>
struct Low {};

这允许您撰写Low<1>Low<2>Low<400>等。


如果您将Low定义为

template <class T>
struct Low;

然后在实例化时提供类型。例如,Low<char>Low<unsigned int>

请注意在每种情况下如何定义它们以及它们如何实例化的区别!

答案 2 :(得分:3)

Low<1>Low<int>之间存在差异。

您需要为Low<1>编写专门化,但这是不可能的,因为原始模板将类型作为第一个参数而不是值。