在C++中是否存在使用枚举作为模板(类型)参数的限制/问题?在C++中使用枚举作为模板类型参数
实施例:
enum MyEnum
{
A, B, C, D, E
};
template <typename _t>
class MyTemplate
{
public:
_t value;
void func(const _t& param) { /* .... */ }
};
// ....
MyTemplate<MyEnum> MyInstance;
我使用MSVC++经由在Win32 VS 2008(SP1)/ x86的实际问题是(由编译器报告=错误)几个编译错误相关联地使用枚举如类模板参数。由于我的项目不幸已变得有点复杂(你可以认为这是一个设计错误:P),引发这些错误的模板类是派生的,嵌套的,甚至专用于带有枚举模板参数的类。
尝试构建时,编译器会在只有注释的行中报告许多错误/无用的错误,例如“C2059:语法错误:'public'”。他们中的很多人可以通过替换类似于示例const _t & param by _t(即复制参数)的方法来解决这些问题,但我既不能解决所有这些错误,也不知道为什么“帮助”。 **我知道,上面这个简单的例子编译了W/O错误。
使用int而不是枚举,我的项目编译W/O错误。
在此先感谢您的任何提示或提示!
编辑:
毕竟,我认真考虑这是一个编译器错误。当我试图用简化的代码重现错误时,我只在所有“构建”的50%中得到它们,不是非常确定的:
例如,试图编译,并报告了这些错误。重建 - 不变。删除评论,建立 - 没有改变。重建 - 然后:没有错误,编译好。
我已经遇到了一些编译器错误(2或3我猜在20k代码行内),但这个对我来说很奇怪。
任何建议如何找出它是否是的编译器?
“试图编译时,编译器会报告许多错误/无用的错误”这些“无用的”错误通常会对错误和错误进行非常详细的描述。只要阅读编译器输出,而不是“错误列表”。 – SigTerm 2010-08-14 23:08:04
感谢提示,但我做到了。我总是这么做^^ 但它没有帮助我...错误:错误C2059:语法错误:'公共'错误C2143:语法错误:缺少'>'之前';'错误C2143:语法错误:缺少';'之前'}'致命错误C1004:发现意外的文件结束(然后一些其他错误,与此问题无关)所有这些仅在使用枚举时出现并在使用int时出现消失 – dyp 2010-08-14 23:15:11
这对我来说看起来很完美。这是一个编译器错误或者你的错误,如果你猜测,99.9%的赌注就是你。但是,您发布的代码段没有任何问题。请发布一个完整的小样本,以及它创建的确切编译器错误。 – Omnifarious 2010-08-14 23:18:47