Search code examples
c++enumsistream

Input from stream to enum type


How to input from stream to enum type?

I can do it so

unsigned int sex = 0;
stream >> sex;
student.m_bio.sex = static_cast<Sex>(sex);

Otherwise?


Solution

  • inline std::istream & operator>>(std::istream & str, Sex & v) {
      unsigned int sex = 0;
      if (str >> sex)
        v = static_cast<Sex>(sex);
      return str;
    }
    

    If you want to ensure that the value is valid, you can do something like this:

    enum Sex {
        Male,
        Female,
        Sex_COUNT
    };
    
    inline std::istream & operator>>(std::istream & str, Sex & v) {
      unsigned int sex = 0;
      if (!(str >> sex))
        return str;
      if (sex >= Sex_COUNT) {
        str.setstate(str.rdstate() | std::ios::failbit);
        return str;
      }
      v = static_cast<Sex>(sex);
      return str;
    }