C++ 范围仅限于“但”;“半弱”;类型化枚举
我希望以作用域格式使用枚举,但能够在枚举和无符号整数之间进行比较和赋值 这是我尝试过的代码,如下所示,效果与预期一致:C++ 范围仅限于“但”;“半弱”;类型化枚举,c++,c++11,enums,C++,C++11,Enums,我希望以作用域格式使用枚举,但能够在枚举和无符号整数之间进行比较和赋值 这是我尝试过的代码,如下所示,效果与预期一致: class SystemEvents { public: enum { Opened, Closed }; }; class OtherEvents { public: enum { Closed,Opened }; }; //test uint32_t e = SystemEvents::Opened; if(e == O
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";
class系统事件{
公众:
枚举{
打开,关闭
};
};
分类其他事件{
公众:
枚举{
关闭,打开
};
};
//试验
uint32_t e=SystemEvents::Opened;
如果(e==OtherEvents::Closed)std::cout可以显式地将枚举类强制转换为整数类型,例如:
static_cast<uint32_t>(SystemEvents::Opened)
static_cast(SystemEvents::Opened)
您还可以编写将强制转换为任何枚举类的基础类型的代码
然而,需要这样做表明你做错了什么。为什么要将SystemEvents
与OtherEvents
进行比较?对于初始化,除了强制转换值之外,您没有什么可以做的。请注意,C++11的强类型枚举并不是要替换现有的枚举,而是要补充现有的枚举。如果需要弱类型的枚举,请不要使用enum类
要比较强类型枚举,可以声明必要的运算符并在实现中强制转换:
bool operator==( uint32_t lhs, SystemEvents rhs )
{
return static_cast< SystemEvent >( lhs ) == rhs;
}
和其他操作符,如=代码>为什么要使用两个不同的枚举来表示同一件事?我开始考虑我要做的事情,也许使用弱类型枚举就足够了。我主要是尝试将uint32\t与SystemEvents进行比较。我把另一个作为测试范围。
bool operator==( uint32_t lhs, SystemEvents rhs )
{
return static_cast< SystemEvent >( lhs ) == rhs;
}
bool operator==( SystemEvents lhs, uint32_t rhs );