C++ C++;部分模板专门化:未声明的标识符错误

C++ C++;部分模板专门化:未声明的标识符错误,c++,templates,partial-specialization,C++,Templates,Partial Specialization,编写此代码的目的是更好地理解部分模板专门化。我试图用三个不同的布尔函数对类向量进行局部特化 我有一个enum(用于我的bool)定义为: enum MY_BOOL { YES, NO, MAYBE }; 对于我的主模板类,我有 template<class A,MY_BOOL,class B> class Vector{}; 模板 类向量{}; 我的部分专业化课程是 template<MY_BOOL b> class Vector<A,YES

编写此代码的目的是更好地理解部分模板专门化。我试图用三个不同的布尔函数对类向量进行局部特化

我有一个enum(用于我的bool)定义为:

enum MY_BOOL
{
   YES,
   NO,
   MAYBE
};
对于我的主模板类,我有

template<class A,MY_BOOL,class B>
class Vector{};
模板
类向量{};
我的部分专业化课程是

template<MY_BOOL b>
class Vector<A,YES,B>{};
模板
类向量{};
编译器抱怨
A
B
是未声明的标识符,并且部分专用
向量
的参数太少。不要抱怨“是”,这让我很困惑,因为主模板类中已经定义了
A
B
。我不需要将它们放回部分专门化类的参数列表中,因为该参数列表的要点是只包含我想要专门化的变量。

in

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

现在每个枚举都有一个专门化。

YES的部分专门化如下所示:

template<class A, class B>
class Vector<A, YES, B>
{ ... };
模板
类向量
{ ... };

部分专门化的含义是提供与基本模板不同的模板参数,并自己填写基本模板缺少的模板参数。

部分专门化中的
A
B
是实际类型吗?请添加一个@NathanOliver,它们不像int或char,但目的是在不同的模板结构中传递。关键字类应该处理这个问题吗?你不能这样专门化
A
B
仅适用于
模板类向量{}。在
模板类向量{}它们不存在。@NathanOliver所以换句话说,我必须在部分专门化模板类的模板参数列表中包含A和B?是的,但它不会是部分专门化。你为什么要在这里实现?@BrogrammerDude如果我要实现成员函数,效果很好。除了在单独的.cpp文件中包含成员函数上方的模板参数列表之外,我还需要做些什么吗?@BrogrammerDude。对于所有的越位成员定义,您需要类似于
template return\u type Vector::function\u name(parameters){}
template<class A, class B>
class Vector<A, YES, B>
{ ... };