在 Stack Overflow 上回答了一个问题: How can I use an enum class in a boolean context?,记录下。
C++ 11 的 explicit operator bool()
可以让类类型的值使用在条件语句中,但无法对 enum
类型提供支持。
下面是我使用的一种方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| struct Error { enum { None = 0, Error1 = 1, Error2 = 2, } Value;
Error(decltype(Value) value = None) : Value(value) {}
explicit operator bool() { return Value != None; } };
inline bool operator==(Error a, Error b) { return a.Value == b.Value; }
inline bool operator!=(Error a, Error b) { return !(a==b); }
|
使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Error lastError();
if (auto err = lastError()) { }
switch (lastError().Value) { case Error::None: break; case Error::Error1: break; default: break; }
if (lastError() == Error::Error1) { }
|