不能专门化结构

Cannot specialize struct

本文关键字:结构 专门化 不能      更新时间:2023-10-16

为什么这不起作用?

template <class T>
struct Low;
template <>
struct Low<int> {};//Here I'm trying to specialize for int
int main()
{
Low<1> a;
}

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

Low<1> a;

您的类模板Low需要类型,而不是整数值!

如果要以这种方式使用,则必须将类模板定义为:

template <int N>
struct Low {};

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


如果将Low定义为,

template <class T>
struct Low;

然后,您必须在实例化它时提供一个类型。例如,Low<char>Low<unsigned int>等。

因此,请注意它们在每种情况下的定义方式和实例化方式的差异!

Low<1>Low<int> 是有区别的。

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