在 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:语法错误:'public'”。其中许多我可以通过用 _t 替换类似于示例中的 const _t& 参数的方法来修复(即复制参数),但我既不能修复所有这些错误,也不知道为什么这个“有帮助” . **我知道,上面的简单示例编译时没有错误。
使用 int 而不是 enum,我的项目编译时没有错误。
提前感谢任何提示或提示!
编辑:
毕竟,我认真地认为这是一个编译器错误。当我试图用简化的代码重现错误时,我只在所有“构建”的 50% 中得到了它们,不是很确定:
例如尝试编译,它报告了这些错误。重建 - 没有变化。删除了评论,构建 - 没有变化。重建 - 然后:没有错误,编译正常。
我已经遇到了一些编译器错误(我猜在 20k 行代码内有 2 或 3 个),但在我看来,这个错误很奇怪。
任何建议如何确定它是否是编译器?