Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

1

05.01.2014, 23:56

C++ und enums [solved]

Nabend,

In meinem derzeitgen Projekt bin ich zum wiederholten Mal auf ein Problem mit enums gestossen.

Das Problem ist folgendes:
Ich will ein Object einer Klasse erstellen, in der ein enum ist. Den Konstruktor fülle ich mit eingelesenen Werten (XML, Datenbank, .txt, Magnetband, Lochkarte,...). Nun kann man in diesen Dateien(/Medien) aber keine enums sondern eben nur chars speichern. Mir ist klar, dass es mehrere Methoden gibt ein char/einen string in ein enum umzuwandeln (std::map,switch,...), allerdings sind diese (meiner Meinung nach) unnötige Rechenzeit und es ist nervig immer dafür zu sorgen, dass eine map am leben bleibt und überall, wo sie benötigt wird, zu Verfügung steht, damit die Daten abgeglichen werden können.

Das ist die Frage:
Benutzt ihr enums überhaupt oder benutzt ihr eher strings oder ähnliches?
Ich persönlich tendiere zu den strings, aber würde meine Meinung gerne mal abgleichen :)

LÖSUNG:
Davids Beitrag.

Grüsse,
Error


PS.: Ja, ich weiss, dass mit der Rechenzeit ist übertrieben :D

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »ERROR« (06.01.2014, 00:19)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

06.01.2014, 00:05

Einen enum-Wert kannst du doch in einen int casten und umgekehrt.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

06.01.2014, 00:06

Kannst du uns vielleicht ein Codebeispiel geben? Mir ist nicht ganz klar, was genau das Problem ist...

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

4

06.01.2014, 00:10

In anderen Foren habe ich mehrfach gelesen, man könnte da gar nichts casten, bzw die Werte würden verfälscht werden können :grumble: :cursing: :cursing:

Danke David, natürlich klappt es.

Meine Mutter hat wohl recht, diesem Internet sollte man nicht so ohne weiteres trauen :crazy:



PS.: Ich habe meinen oberen Beitrag mal editiert.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

06.01.2014, 00:50

Intern ist ein enum eh nichts anderes als ein int.
Naja, neuerdings kann man sogar noch sagen, auf welchem int-Typ das enum basieren soll.

6

06.01.2014, 06:19

Naja, neuerdings kann man sogar noch sagen, auf welchem int-Typ das enum basieren soll.

Welchen Sinn hat das eigentlich, wenn ein enum sowieso immer die kleinst mögliche Byteanzahl nutzt?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

06.01.2014, 06:53

Wer hat denn das behauptet?
Simples Gegenbeispiel:
http://codepad.org/2VC6dd7N

Und:

Zitat

For an enumeration whose underlying type is not fixed, the underlying type is an integral type that can represent all the enumerator values defined in the enumeration.

Ohne expliziten Typ äußerst unportabel.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

8

06.01.2014, 07:53

Es gibt sowohl Gründe für den kleinstmöglichen Typ als auch für die native Wortbreite. Historisch war die Wortbreite wohl die bessere Wahl (damals war das Verhältnis von Rechentakt zu Speichertakt günstiger und CPUs schneller mit nativen Worten); heute wäre es der kleinstmögliche Typ (wo ja sogar Mobil-CPUs genug Transistoren für kleine Speicherzugriffe haben und die Speicherlatenz der Flaschenhals ist). Aber das nachträglich zu ändern würde wahrscheinlich Programme kaputtmachen.

9

06.01.2014, 08:40

Ah, ok, dann muss ich das irgendwo mal falsch verstanden haben ;)
Danke für die Aufklärung.

Werbeanzeige