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

Overload input (>>) operator to take enum strings

本文关键字:gt 获取 枚举 字符串 运算符 输入 重载      更新时间:2023-10-16
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;
}