C 部分模板专业化:未申报的标识符误差
C++ Partial Template Specialization:Undeclared identifier error
编写此代码的目标是更好地了解部分模板专业化。我正在尝试通过三个不同的布尔分类。
我的枚举(我的布尔)被定义为:
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
的参数太少。不抱怨"是"这使我感到困惑,因为A
和B
已经在主模板类中定义了。我不需要将它们放回部分专业类的参数列表中,因为该参数列表的重点是只有我想要的变量。
in
template<MY_BOOL b>
class Vector<A,YES,B>{};
由于未指定A
和B
,因此您会收到编译器错误。它不会从主模板中使用A
和B
,它将仅使用专业中定义的类型/值。
由于您想要对每个枚举价值的专业化,因此可以这样做
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>
{ ... };
部分专业化的含义是,您提供了与基本模板不同的模板参数,并填写基本模板的丢失模板参数。
相关文章:
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 为什么在浮点中从大到小会引入更多的误差
- #ifdef和未声明的标识符
- f2、f3、f4标识符未找到
- 设置 Visual Studio for MPI: 找不到标识符错误
- 未声明的标识符编译暗黑破坏神 2 程序"muleview"
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- Google protobuf 时间戳未声明标识符,在 Windows 上具有C++
- 如何让 GCC/Clang 在保留标识符上出错
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 使用说明符 extern 声明的C++中的标识符链接
- C++:枚举:错误:应使用标识符而不是"}"
- 为什么我们不能重复使用具有不同模板参数的别名模板标识符?
- Visual Studio C++ PlaySound 标识符未定义
- 为什么我们不编写可以处理C++标识符的汇编器和链接器?
- 使用未声明的标识符"sqrt"?
- 找不到标识符合并
- C 部分模板专业化:未申报的标识符误差
- APN.C :从误差响应中提取标识符