C++ 部分模板 Specialization:Undeclared 标识符错误
C++ Partial Template Specialization:Undeclared identifier error
编写这段代码的目的是为了更好地理解部分模板特化。我正在尝试使用三个不同的布尔值来部分专门化 class 向量。
我有一个枚举(对于我的 bool)定义为:
enum MY_BOOL
{
YES,
NO,
MAYBE
};
对于我的主要模板 class 我有
template<class A,MY_BOOL,class B>
class Vector{};
我的偏特化class是
template<MY_BOOL b>
class Vector<A,YES,B>{};
编译器抱怨 A
和 B
是未声明的标识符,并且部分专用 Vector
的参数太少。不抱怨 'YES' 这让我感到困惑,因为 A
和 B
已经在主模板 class 中定义。我不需要将它们放回部分专用 class 的参数列表中,因为该参数列表的重点是只有我想要专用的变量。
在
template<MY_BOOL b>
class Vector<A,YES,B>{};
由于未指定 A
和 B
,您会收到编译器错误。它不会使用主模板中的 A
和 B
,它只会使用专业化中定义的 types/value。
因为你想对每个枚举值进行专门化,你可以这样做
template<class A,MY_BOOL,class B>
class Vector {};
template<class A, class B>
class Vector<A, YES, B>{ /* YES stuff */ };
template<class A, class B>
class Vector<A, NO, B>{ /* NO stuff */ };
template<class A, class B>
class Vector<A, MAYBE, B>{ /* MAYBE stuff */ };
现在每个枚举都有一个专业化。
YES 的部分特化如下:
template<class A, class B>
class Vector<A, YES, B>
{ ... };
部分特化的意思是你提供与基础模板不同的模板参数,并自己填写基础模板缺少的模板参数。
编写这段代码的目的是为了更好地理解部分模板特化。我正在尝试使用三个不同的布尔值来部分专门化 class 向量。
我有一个枚举(对于我的 bool)定义为:
enum MY_BOOL
{
YES,
NO,
MAYBE
};
对于我的主要模板 class 我有
template<class A,MY_BOOL,class B>
class Vector{};
我的偏特化class是
template<MY_BOOL b>
class Vector<A,YES,B>{};
编译器抱怨 A
和 B
是未声明的标识符,并且部分专用 Vector
的参数太少。不抱怨 'YES' 这让我感到困惑,因为 A
和 B
已经在主模板 class 中定义。我不需要将它们放回部分专用 class 的参数列表中,因为该参数列表的重点是只有我想要专用的变量。
在
template<MY_BOOL b>
class Vector<A,YES,B>{};
由于未指定 A
和 B
,您会收到编译器错误。它不会使用主模板中的 A
和 B
,它只会使用专业化中定义的 types/value。
因为你想对每个枚举值进行专门化,你可以这样做
template<class A,MY_BOOL,class B>
class Vector {};
template<class A, class B>
class Vector<A, YES, B>{ /* YES stuff */ };
template<class A, class B>
class Vector<A, NO, B>{ /* NO stuff */ };
template<class A, class B>
class Vector<A, MAYBE, B>{ /* MAYBE stuff */ };
现在每个枚举都有一个专业化。
YES 的部分特化如下:
template<class A, class B>
class Vector<A, YES, B>
{ ... };
部分特化的意思是你提供与基础模板不同的模板参数,并自己填写基础模板缺少的模板参数。