重载输入(>>)运算符以获取枚举字符串

时间:2019-11-22 21:34:58

标签: c++ input operator-overloading

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;
}

1 个答案:

答案 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;
}