2
我不明白爲什麼我不能到:給std :: cin提取物枚舉
enum MyEnum {X=1, Y};
...
X x;
std::cin >> x;
問題是,C++不聰明enougth還是我誤以爲的東西嗎?
我不明白爲什麼我不能到:給std :: cin提取物枚舉
enum MyEnum {X=1, Y};
...
X x;
std::cin >> x;
問題是,C++不聰明enougth還是我誤以爲的東西嗎?
可以,但你需要編寫自定義operator>>
過載:
std::istream& operator>>(std;:istream& is, MyEnum& e) { ... }
你不能使用默認std::istream
operator>>
重載這樣做的原因是,右側的參數必須與運營商的參數完全匹配過載,因爲它是由非const引用引起的(因爲操作符將通過分配給它來修改對象)。
另一種選擇是從流整數表示提取到一個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?)
`MyEnum`是用戶定義的類型。你認爲語言(編譯器)有多聰明是爲了「猜測」你想輸出任何給定的用戶定義類型的格式? – 2011-01-26 19:02:36