我不明白为什么我做不到:
enum MyEnum {X=1, Y};
...
X x;
std::cin >> x;
问题是 C++ 不够智能还是我搞错了什么?
最佳答案
你可以,但是你需要写一个自定义的 operator>>
重载:
std::istream& operator>>(std;:istream& is, MyEnum& e) { ... }
不能使用默认的 std::istream
operator>>
重载的原因是右侧参数必须与运算符重载的参数完全匹配,因为它由非常量引用获取(因为运算符将通过分配给它来修改对象)。
另一种选择是从流中将整数表示形式提取到 int
中,然后将其转换为枚举类型:
int i;
MyEnum e;
if (!(std::cin >> i)) { /* handle error */ }
e = static_cast<MyEnum>(i);
您可能想在这里执行一些错误检查,除非您确定提取的值能够由 MyEnum
表示。 (从技术上讲,您还应该小心提取到 int
,因为 int
可能无法表示 MyEnum
的所有值。有一个在另一个问题的答案中解释如何做到这一点,How can I extend a lexical cast to support enumerated types? )
关于c++ - std::cin 提取到枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4807033/