【发布时间】:2019-03-05 20:56:35
【问题描述】:
编写此代码的目的是更好地理解部分模板专业化。我正在尝试使用三种不同的布尔值对 Vector 类进行部分专业化。
我有一个枚举(对于我的布尔值)定义为:
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 是未声明的标识符,并且部分专用Vector 的参数太少。不抱怨'YES' 这让我很困惑,因为A 和B 已经在主模板类中定义了。我不需要将它们放回部分专门化类的参数列表中,因为该参数列表的重点是只包含我想要专门化的变量。
【问题讨论】:
-
A和B是您的部分专业化的实际类型吗?请添加minimal reproducible example。 -
@NathanOliver 它们不像 int 或 char 但目的是在不同的模板结构中传递。关键字类应该处理这个吗?
-
你不能做这样的专业化。
A和B仅适用于template<class A,MY_BOOL,class B> class Vector{};。在template<MY_BOOL b> class Vector<A,YES,B>{};中它们不存在。 -
@NathanOliver 所以换句话说,我必须在我的模板参数列表中包含 A 和 B 以用于部分专用模板类?
-
是的,但它不会是部分专业化。你为什么要在这里实现?
标签: c++ templates partial-specialization