【发布时间】:2010-08-14 23:04:42
【问题描述】:
在 C++ 中使用枚举作为模板(类型)参数是否有任何限制/问题?
例子:
enum MyEnum
{
A, B, C, D, E
};
template <typename _t>
class MyTemplate
{
public:
_t value;
void func(const _t& param) { /* .... */ }
};
// ....
MyTemplate<MyEnum> MyInstance;
我在 Win32/x86 上通过 VS 2008 (SP1) 使用 MSVC++ 的实际问题是与使用枚举作为模板参数的类相关的几个编译错误(= 编译器报告的错误)。由于我的项目不幸变得有点复杂(您可以将其视为设计错误:P),引发这些错误的模板类是派生的、嵌套的,甚至专门用于具有枚举模板参数的类。
在尝试构建时,编译器在只有注释的行中报告了许多错误/无用的错误,例如“C2059: syntax error: 'public'”。其中许多我可以通过用 _t 替换类似于示例中的 const _t& 参数的方法来修复(即复制参数),但我既不能修复所有这些错误,也不知道为什么这个“有帮助” . **我知道,上面的简单示例编译时没有错误。
使用 int 而不是 enum,我的项目编译时没有错误。
提前感谢任何提示或提示!
编辑:
毕竟,我认真地认为这是一个编译器错误。当我试图用简化的代码重现错误时,我只在所有“构建”的 50% 中得到了它们,不是很确定:
例如。试图编译,它报告了这些错误。重建 - 没有变化。删除了评论,构建 - 没有变化。重建 - 然后:没有错误,编译正常。
我已经遇到了一些编译器错误(我猜在 20k 行代码内有 2 或 3 个),但在我看来,这个错误很奇怪。
任何建议如何确定它是否是编译器?
【问题讨论】:
-
“尝试构建时,编译器报告了许多错误/无用的错误” 这些“无用”错误通常非常详细地描述了哪里/哪里出了问题。只需读取编译器输出而不是“错误列表”。
-
感谢您的提示,但我做到了。我总是这样做^^但这对我没有帮助...错误:错误C2059:语法错误:'public'错误C2143:语法错误:在';'之前缺少'>'错误 C2143:语法错误:缺少“;”在'}'之前致命错误C1004:发现意外的文件结尾(然后是一些其他错误,与此问题无关)所有这些仅在使用枚举时出现,在使用int时消失
-
这对我来说看起来非常好。这要么是编译器错误,要么是你的错误,如果你要猜测,99.9% 的赌注就是你。但是您发布的sn-ps没有任何问题。请发布一个内部完整的小示例以及它创建的确切编译器错误。
-
我同意 - 请参阅编辑。只是想知道为什么 int 类型编译得很好
-
代码 sn-p 在我的 MSVC 编译器上编译良好,没有警告或错误!!
标签: c++ templates enums visual-c++-2008