![]() |
Enums vereinen
Hallo zusammen,
ich suche eine Möglichkeit ein Enum, um Datentypen zu erweitern. Also quasi davon abzuleiten und dann etwas hinzu fügen. Um das Ganze zu verdeutlichen hier ein kleines Beispiel dazu:
Delphi-Quellcode:
Wie ihr seht versuche ich Obst und Gemüse auf diese Art zusammen bekommen? Das funktioniert aber nicht werder mit OR, noch mit AND, noch mit einem Komma. :( Geht sowas in Delphi(2007) überhaupt?
TObst = (Apfel, Birne, Pflaume);
TGemuese = (Moehre, Lauch, Gurke); TGesundeSachen = set of TObst AND TGemuese; implementation procedure TForm6.FormCreate(Sender: TObject); var aSchale : TGesundeSachen; tmp : String; begin aSchale := [Moehre, Apfel]; tmp := ''; case aSchale of Apfel: tmp := tmp + 'Apfel, '; Birne: tmp := tmp + 'Birne, '; Pflaume : tmp := tmp + 'Pflaume, '; Moehre: tmp := tmp + 'Moehre, '; Lauch: tmp := tmp + 'Lauch, '; Gurke: tmp := tmp + 'Gurke, '; end; ShowMessage('Der Obstsalat enthält ' + tmp); end; Vielen Dank, Tobi |
Re: Enums vereinen
Nein so etwas geht nicht. Aber du kannst es umgekehrt machen:
Delphi-Quellcode:
:wink:
TGesundeSachen = (Apfel, Birne, Pflaume, Moehre, Lauch, Gurke);
TObst = Apfel..Pflaume; TGemuese = Moehre..Gurke; |
Re: Enums vereinen
in c++ geht das mit dem
Delphi-Quellcode:
oder?
and
|
Re: Enums vereinen
Wäre aber sehr merkwürdig. Da Apfel und Möhre die selben Ordinalwerte haben kann das eigentlich nicht gehen
|
Re: Enums vereinen
Zitat:
|
Re: Enums vereinen
Zitat:
C++ hat halt keine vernünftige Implementierung eines Enum-Typs. |
Re: Enums vereinen
Zitat:
Immerhin könnte man dort intern die Wertebereiche entsprechend verschieben und alles in einem Enum/Integer verwalten. Aber ganz ehrlich, ich sehe keinen Grund für diesen Aufwand. Die korrekte Lösung wurde ja schon genannt - siehe #2 PS: ende letzes Jahr gab es doch schonmal genau diese Frage (ich finde nur gerade den Thread nicht) und ich glaub da ging es auch um Obst und Gemüse. |
Re: Enums vereinen
Hallo zusammen,
vielen Dank für die Antworten, ich habe eine Funktion die eine Vergleichsmenge heraus gibt, diese steht mit samt enum in einem für mich unzugänglichen Unit(ich darf nur lesen). Ich habe die Klasse abgeleitet und wollte jetzt, die Methdoik um weiter Vergleichstypen erweitern. Da ich aber auf die Vergleichsmenge keinen Zugriff habe, und selbst wenn ich wollte das designtechnisch Blödsinn wäre, wollte ich diese Menge erweitern. Es geht mir nicht um Obst oder Gemüse von mir aus können das auch verschiedene Waschmittel sein, ich habe nur ein Trivalbeispiel gesucht was nicht so komplex ist. |
Re: Enums vereinen
Hallo HighTower,
du könntest vielleicht die beiden Methoden isGemüse und isObst in der Klasse implementieren, die auf die enums zugreift. Und isGesund wäre dann isGemüse oder isObst. Du kannst dir auch eine Implementierung auf Basis von Mengen (Sets) überlegen. |
Re: Enums vereinen
Ich würde mal grundsätzlich darüber nachdenken die gesunden Sachen in Klassen zu verpacken. Ziel muss es sein, dein Angebot an gesunden Sachen erweitern zu können OHNE den Quellcode anfassen zu müssen. Also eine "gesunde" Klasse erstellen und die Instanzen davon (Gurke, Apfel, usw.) z.B. in einer Collection verwalten.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz