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>{};

编译器抱怨 AB 是未声明的标识符,并且部分专用 Vector 的参数太少。不抱怨 'YES' 这让我感到困惑,因为 AB 已经在主模板 class 中定义。我不需要将它们放回部分专用 class 的参数列表中,因为该参数列表的重点是只有我想要专用的变量。

template<MY_BOOL b>
class Vector<A,YES,B>{};

由于未指定 AB,您会收到编译器错误。它不会使用主模板中的 AB,它只会使用专业化中定义的 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>
{ ... };

部分特化的意思是你提供与基础模板不同的模板参数,并自己填写基础模板缺少的模板参数。