AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Aufzählungstypen vereinigen

Ein Thema von blablab · begonnen am 2. Apr 2012 · letzter Beitrag vom 5. Apr 2012
Antwort Antwort
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

Aufzählungstypen vereinigen

  Alt 2. Apr 2012, 15:02
Hallo!

Ich möchte eine Aufzählung definieren, die aus mehreren anderen Aufzählungen besteht.
Delphi-Quellcode:
type
   TTeilmengeA = (a1, a2, a3);
   TTeilmengeB = (b1, b2, b3);
   TAll = TTeilmengeA + TTeilmengeB;
Da das leider nicht geht hab ich es so versucht:
Delphi-Quellcode:
type
   TAll = (a1, a2, a3, b1, b2, b3);
   TTeilmengeA = a1..a3;
   TTeilmengeB = b1..b3;
Am Schluss möchte ich dann eine Variable vom Typ TAll haben und überprüfen ob sie sich in der Teilmenge TTeilmengeA oder TTeilmengeB befindet. In etwa so:
Delphi-Quellcode:
var typ: TAll;
if typ in TeilmengeA then begin
...
Das einzige was mir dazu einfällt ist:
Delphi-Quellcode:
var typ: TAll;
if (typ >= Low(TTeilmengeA)) and (typ <= High(TTeilmengeA)) then begin ...
Gibt es hier noch eine bessere Lösung?

Grüße
blablab
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.747 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Aufzählungstypen vereinigen

  Alt 2. Apr 2012, 15:09
Vielleicht so:
Delphi-Quellcode:
type
  TAll = (a1, a2, a3, b1, b2, b3);
const
  cTeilmengeA = [a1..a3];
  cTeilmengeB = [b1..b3];
var
  typ: TAll;

  if typ in cTeilmengeA then
Uli Gerhardt
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#3

AW: Aufzählungstypen vereinigen

  Alt 3. Apr 2012, 09:46
Der "in"-Operator ist nur für ein Element einer Menge definiert, nicht für Menge in Menge.
Delphi-Quellcode:
type
  Ta = (a1, a2, a3, a4, a5, a6);
  TaMenge = set of Ta;

function AinB(const A, B: TaMenge): Boolean;
begin
  Result := (a = (a * b));
end;

procedure TestMenge;
const
  a: TaMenge = [a1, a6];
  b1: TaMenge = [a1, a2, a4, a5];
  b2: TaMenge = [a2, a4, a6];
begin
  if AinB(a, b1 + b2) then
    {...}
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.747 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Aufzählungstypen vereinigen

  Alt 3. Apr 2012, 09:56
Der "in"-Operator ist nur für ein Element einer Menge definiert, nicht für Menge in Menge.
Und Ersteres will der OP ja auch:
Am Schluss möchte ich dann eine Variable vom Typ TAll haben und überprüfen ob sie sich in der Teilmenge TTeilmengeA oder TTeilmengeB befindet. In etwa so:
Delphi-Quellcode:
var typ: TAll;
if typ in TeilmengeA then begin
...
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.314 Beiträge
 
Delphi 12 Athens
 
#5

AW: Aufzählungstypen vereinigen

  Alt 3. Apr 2012, 10:26
OK, dann
IN ist nur für das Prüfen eines Elementes in einer Mengenvariable
und nicht in einem Mengentypen.

Man könnte Embarcadero im QS mal fragen, ob die das nicht implementieren könnten
oder man geht eben doch über die Konstanten.


Delphi-Quellcode:
type
   TAll = (a1, a2, a3, b1, b2, b3);
   TTeilmengeA = a1..a3;
   TTeilmengeB = b1..b3;

const
//cTeilmengeA = [a1..a3];
//cTeilmengeB = [b1..b3];
  cTeilmengeA = [Low(TTeilmengeA)..High(TTeilmengeA)];
  cTeilmengeB = [Low(TTeilmengeB)..High(TTeilmengeB)];

Man könnte sich auch sowas basteln
Delphi-Quellcode:
type
  MyHelper = class abstract
    class function IsInType<TEnum{: ENUM}>(const Value: TEnum): Boolean;
  end;
Schade daß es die Einschränkung enum/ordinal nicht gibt, dann wäre der Code darin voll einfach, ohne über die RTTI und einige Casts gehn zu müssen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Apr 2012 um 10:35 Uhr)
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#6

AW: Aufzählungstypen vereinigen

  Alt 3. Apr 2012, 14:50
Interessant, konzeptionell unvereinbare Mengen (Enums) plötzlich über einen Kamm zu scheren und unter einen Hut packen zu wollen.

Ob da nicht ein Designfehler vorliegt?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:07 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 by Thomas Breitkreuz