tutorial findoneandupdate findbyidandupdate español deletemany delete attribute aprender c++ coding-style enums char

c++ - findoneandupdate - Enlazar un char a un tipo enum



solidity español (3)

Tengo un código bastante similar a esto:

class someclass { public: enum Section{START,MID,END}; vector<Section> Full; void ex(){ for(int i=0;i<Full.size();i++) { switch (Full[i]) { case START : cout<<"S"; break; case MID : cout<<"M"; break; case END: cout<<"E"; break; } } } };

Ahora imagina que tengo muchos más tipos de enum y sus nombres son más largos ... bueno, lo que obtengo no es un código muy bueno y me preguntaba si sería posible enlazar un char específico con un tipo enum y quizás hacer algo como esto :

for(int i=0;i<Full.size();i++) { cout<(Full[i]).MyChar(); }

O cualquier otro método que podría hacer que este código sea "más bonito". es posible?


Creo que la mejor solución en este caso sería usar un mapa:

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


En una situación como esta podrías ser complicado y lanzar tus personajes.

enum Section{ START = (int)''S'', MID = (int)''M'', END = (int)''E'' }; ... inline char getChar(Section section) { return (char)section; }


Lamentablemente, no hay mucho que puedas hacer para limpiar esto. Si tiene acceso a la función del enumerador fuertemente tipada C ++ 11, entonces podría hacer algo como lo siguiente:

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

Y luego podrías hacer algo como:

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

Sin embargo, si no tiene acceso a esta característica, entonces no hay mucho que pueda hacer, mi consejo sería tener un mapa global std::map<Section, char> , que relacione cada sección enum con un carácter, o una función auxiliar con el prototipo:

inline char SectionToChar( Section section );

Que simplemente implementa la instrucción switch() de una manera más accesible, por ejemplo:

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