South_Bridge Skrevet 1. mars 2010 Del Skrevet 1. mars 2010 (endret) Hvis jeg har følgende enums: enum Color { RED, GREEN, BLUE } og skriver følgende: std::cout << "Color is " << RED << std::endl; får jeg ut "Color is 0". Det er jo litt kjedelig da jeg ville ha hatt ut "Color is RED". Kan det gjøres på en eller annen måte? En kan jo lage en tabell(for oppslag på indeks) med strings men det hindrer systemet å være fullt så fleksibelt. Endret 1. mars 2010 av South_Bridge Lenke til kommentar
GeirGrusom Skrevet 1. mars 2010 Del Skrevet 1. mars 2010 Det er ikke noen reflection i C++. Lenke til kommentar
Giddion Skrevet 2. mars 2010 Del Skrevet 2. mars 2010 Som GeirGrusom sier så er ikke det støttet i c++, så for å få det til (med bare en definisjon) må du bruke macroer eller noen eksterne programmer. Lenke til kommentar
zotbar1234 Skrevet 2. mars 2010 Del Skrevet 2. mars 2010 (endret) En kan jo lage en tabell(for oppslag på indeks) med strings men det hindrer systemet å være fullt så fleksibelt. I utgangspunktet -- nei. C++ tilbyr ikke symbolmanipulasjon på dette nivået. Du kan muligens prøve en eller annen form for preprosessering (makroer? Ditt eget lille språk på toppen av C++), men det blir også en del arbeid. Dersom C++-kompilatoren din støtter C99-utvidelser og du ikke er redd for evt. inkompatibilitet og du ikke setter enum-verdiene til noe veldig spesifikt, så kan dette være en framgangsmåte: enum color { red, green, blue }; const char *color_names[] = { [red] = "red", [green] = "green", [blue] = "blue", }; Evt. en funksjon som populerer en std::map (eller tilsvarende) som du så bruker for å oversette fra enum til dens tekstlige representasjon. Endret 2. mars 2010 av zotbar1234 Lenke til kommentar
_Ferrari_ Skrevet 2. mars 2010 Del Skrevet 2. mars 2010 Letteste er vel noe å lage en switch eller noe lignende. enum Color {red, blue, green}; Color farge; farge = red; switch(farge) { case red: cout << "red"; break; case blue: cout << "blue"; break; case green: cout << "green"; break; } Lenke til kommentar
South_Bridge Skrevet 3. mars 2010 Forfatter Del Skrevet 3. mars 2010 Letteste er vel noe å lage en switch eller noe lignende. enum Color {red, blue, green}; Color farge; farge = red; switch(farge) { case red: cout << "red"; break; case blue: cout << "blue"; break; case green: cout << "green"; break; } mja... jeg endte opp med dette: enum Color { RED, GREEN, BLUE } std::string strColor[3] = { "RED", "GREEN", "BLUE" }; Og tanken ble da at enum Colors verdi ble da indeksen på det jeg ville ha i strColor Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå