我希望能够以作用域格式使用枚举,同时可以在枚举和无符号整数之间进行比较和赋值。
下面是我尝试过的代码,它的运行效果符合预期:
class SystemEvents {
public:
enum {
Opened, Closed
};
};
class OtherEvents {
public:
enum {
Closed,Opened
};
};
//test
uint32_t e = SystemEvents::Opened;
if(e == OtherEvents::Closed) std::cout << "enums are weakly typed and scoped";
但我想知道是否有使用 C++11 语法实现它的方法?
enum class SystemEvents : uint32_t {
Opened,Closed
};
enum class OtherEvents : uint32_t {
Closed,Opened
};
//test
uint32_t e = SystemEvents::Opened;
if(e == OtherEvents::Closed) std::cout << "enums are weakly typed and scoped";
如预期那样,上述代码给了我一个错误:“无法使用SystemEvents的rvalue类型初始化int类型的变量”。那么,我应该坚持使用C风格的作用域枚举,还是有一种C++11的方法可以解决这个问题?或者还有其他方法可以解决吗?