作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我有
enum class Flags : std::uint16_t
{
None = 0,
A = 0x0001,
B = 0x0002,
C = 0x0004
}
inline Flags operator|(Flags lhs, Flags rhs)
{
return static_cast<Flags>(static_cast<std::uint16_t>(lhs) | static_cast<std::uint16_t>(rhs));
}
inline Flags operator&(Flags lhs, Flags rhs)
{
return static_cast<Flags>(static_cast<std::uint16_t>(lhs) & static_cast<std::uint16_t>(rhs));
}
inline Flags operator|=(Flags& lhs, Flags rhs)
{
return lhs = lhs | rhs;
}
inline Flags operator&=(Flags& lhs, Flags rhs)
{
return lhs = lhs & rhs;
}
是否有可能使枚举类在上下文中可转换为 bool 以允许某人做
Flags f = /* ... */;
if (f & Flags::A) {
// Do A things
}
最佳答案
我认为您不能为 bool
提供转换运算符,因为没有该类的真实实例,但您可以重载其他运算符。最自然的是 operator!
:
bool operator!(Flags f) {
return f == Flags::None;
}
然后你的程序会做:
if (!!(f & Flags::A)) {
这确实不自然,但对其他人来说并不可怕(至于这意味着什么,他们可能会对双重否定感到困惑)。
或者,您可以将操作实现为命名函数以使其更具可读性:
bool test(Flag f, Flag mask) {
return !!(f & mask);
}
if (test(f,Flags::A)) { …
话又说回来,如果你真的想要隐式转换,你为什么首先使用枚举类?
关于c++ - 是否可以将作用域枚举 ("enum class") 上下文转换为 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24297992/
我是一名优秀的程序员,十分优秀!