C 部分模板专业化:未申报的标识符误差

C++ Partial Template Specialization:Undeclared identifier error

本文关键字:标识符 误差 专业化      更新时间:2023-10-16

编写此代码的目标是更好地了解部分模板专业化。我正在尝试通过三个不同的布尔分类。

我的枚举(我的布尔)被定义为:

enum MY_BOOL
{
   YES,
   NO,
   MAYBE
};

对于我的主要模板类,我有

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

和我拥有的部分专业课程是

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

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

in

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

由于未指定AB,因此您会收到编译器错误。它不会从主模板中使用AB,它将仅使用专业中定义的类型/值。

由于您想要对每个枚举价值的专业化,因此可以这样做

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 */ };

现在您对每个枚举都有专业化。

是的,是:

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

部分专业化的含义是,您提供了与基本模板不同的模板参数,并填写基本模板的丢失模板参数。