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

最佳答案

你说


  在理想情况下,它看起来像这样:

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

07-24 09:47
查看更多