Bind a char to an enum type

后端 未结 3 1716
死守一世寂寞
死守一世寂寞 2021-02-20 15:44

I have a piece of code pretty similar to this:

class someclass
{
public:
enum Section{START,MID,END};
vector
Full; void ex(){ for(int i=0;i<
相关标签:
3条回答
  • 2021-02-20 16:07

    In a situation like this you could be tricky and cast your chars.

    enum Section{
        START = (int)'S',
        MID   = (int)'M',
        END   = (int)'E'
    };
    
    ...
    
    inline char getChar(Section section)
    {
        return (char)section;
    }
    
    0 讨论(0)
  • 2021-02-20 16:27

    Unfortunately there is not much you can do to clean this up. If you have access to the C++11 strongly typed enumerator feature, then you could do something like the following:

    enum class Section : char {
         START = 'S',
         MID = 'M',
         END = 'E',
    };
    

    And then you could do something like:

    std::cout << static_cast<char>(Full[i]) << std::endl;
    

    However, if you do not have access to this feature then there's not much you can do, my advice would be to have either a global map std::map<Section, char>, which relates each enum section to a character, or a helper function with the prototype:

    inline char SectionToChar( Section section );
    

    Which just implements the switch() statement in a more accessible way, e.g:

    inline char SectionToChar( Section section ) {
         switch( section )
         {
         default:
             {
                 throw std::invalid_argument( "Invalid Section value" );
                 break;
             }
         case START:
             {
                 return 'S';
                 break;
             }
         case MID:
             {
                 return 'M';
                 break;
             }
         case END:
             {
                 return 'E';
                 break;
             }
         }
    }
    
    0 讨论(0)
  • 2021-02-20 16:28

    I think the best solution in this case would be to use a map:

    #include <iostream>
    #include <map>
    class someclass
    {
        public:
        enum Section{START = 0,MID,END};
        map<Section,string> Full;
    
        // set using Full[START] = "S", etc
    
        void ex(){
            for(int i=0;i<Full.size();i++)
            {
                cout << Full[i];
            }
        }
    };
    
    0 讨论(0)
提交回复
热议问题