enum shuffle_mode {IN, OUT};
istream& operator>> (istream& in, shuffle_mode& shuffle) {
int a;
in >> a;
if (a==1) {shuffle=IN;}
if (a==2) {shuffle=OUT;}
}
我想修改此运算符的重载,以便能够直接将IN或OUT用作输入,而不是枚举中对应的数字。
在理想情况下,它看起来像这样:
istream& operator>> (istream& in, shuffle_mode shuffle) {
in >> shuffle;
}
答案 0 :(得分:3)
你说
在理想情况下,它看起来像这样:
istream& operator>> (istream& in, shuffle_mode shuffle) { in >> shuffle; }
那将是一个问题。这将导致无限递归和堆栈溢出。
您可以使用:
istream& operator>> (istream& in, shuffle_mode& shuffle) {
std::string token;
in >> token;
if ( token == "IN" || token == "1" ){shuffle=IN;}
else if ( token == "OUT" || token == "2" ){shuffle=OUT;}
else { /* Error */ }
return in;
}