在C++中,使用枚举作为模板(类型)参数是否有任何限制/问题?
示例:
我在Win32/x86上使用VS 2008(SP1)时,遇到了使用枚举作为模板参数的类相关的编译错误。由于我的项目变得有些复杂(你可以把它看作是设计错误:P),引发这些错误的模板类是派生的、嵌套的,甚至是基于一个带有枚举模板参数的类进行特化。
尝试构建时,编译器报告许多错误,如“C2059:语法错误:'public'”等,而在这些行中只有注释。其中许多错误我可以通过将类似于示例中的方法中的const _t& param替换为_t(即复制参数)来修复,但我既不能修复所有这些错误,也不知道为什么这样做“有用”。**我知道,上面的简单示例可以编译而没有错误。
使用int而不是枚举,我的项目可以编译而没有错误。
提前感谢任何提示或建议!
编辑:
毕竟,我认为这是编译器的一个bug。当我尝试用简化的代码重现这些错误时,在50%的“构建”中才会出现这些错误,不太确定:
例如,尝试编译,然后报告这些错误。重建 - 没有改变。删除注释,构建 - 没有改变。重建 - 然后:没有错误,编译良好。
我已经遇到了一些编译器bug(我想在20k行代码中有2或3个),但这个看起来非常奇怪。
有什么建议可以找出它是否是编译器?
示例:
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)时,遇到了使用枚举作为模板参数的类相关的编译错误。由于我的项目变得有些复杂(你可以把它看作是设计错误:P),引发这些错误的模板类是派生的、嵌套的,甚至是基于一个带有枚举模板参数的类进行特化。
尝试构建时,编译器报告许多错误,如“C2059:语法错误:'public'”等,而在这些行中只有注释。其中许多错误我可以通过将类似于示例中的方法中的const _t& param替换为_t(即复制参数)来修复,但我既不能修复所有这些错误,也不知道为什么这样做“有用”。**我知道,上面的简单示例可以编译而没有错误。
使用int而不是枚举,我的项目可以编译而没有错误。
提前感谢任何提示或建议!
编辑:
毕竟,我认为这是编译器的一个bug。当我尝试用简化的代码重现这些错误时,在50%的“构建”中才会出现这些错误,不太确定:
例如,尝试编译,然后报告这些错误。重建 - 没有改变。删除注释,构建 - 没有改变。重建 - 然后:没有错误,编译良好。
我已经遇到了一些编译器bug(我想在20k行代码中有2或3个),但这个看起来非常奇怪。
有什么建议可以找出它是否是编译器?