问题变了!
我使用一种简单的方法将我的枚举隐藏在本地命名空间中——在结构中进行枚举。大致是这样的:
struct Color
{
enum Type
{
Red, Green, Black
};
Type t_;
Color(Type t) : t_(t) {}
operator Type () const {return t_;}
private:
template<typename T>
operator T () const;
};
operator T () 是对隐式类型转换的保护。然后我尝试用 gcc 和 keil 编译这段代码:
Color n;
int a[9];
a[ (int)n ] = 1;
gcc 编译它没有错误(这是我所期望的),但 Keil 给了我一个错误:“无效的类型转换。运算符 () 无法访问”。
所以我的问题是:哪个编译器是正确的?
我知道 c++11 枚举类,但现在 Keil 不支持它