Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Anzahl der Elemente einer Enum


Martok - Do 23.05.13 17:46
Titel: Anzahl der Elemente einer Enum
Hallöchen!

Möchte jemand seltsame Probleme lösen, die sich in noch seltsameren Corner Cases bewegen? Super, ich hab da was für euch :zustimm:
Situation:

Delphi-Quelltext
1:
2:
3:
4:
5:
  TEnum = (
    eVal1 = $f000,
    eVal2 = $f002,
    eVal3 = $f004,
  );


Jetzt ist die spannende Frage: wie viele Elemente hat diese Enum? High()-Low() passt nicht, da die Werte einen größeren Abstand haben. TypeInfo gibt aus genau diesem Grund auch keine [http://stackoverflow.com/questions/1420562/why-do-i-get-type-has-no-typeinfo-error-with-an-enum-type].
Ich brauche das Ganze für Array-Grenzen, muss also vom Compiler auflösbar sein. array[TEnum] of als simple Lösung geht nicht, weil das (vermutlich deswegen) auch keine Assigned Enums mag.

Hat da jemand kreative Ideen, die besser sind als "Zähle halt von Hand und schreib die Zahl hin"?

Viele Grüße,
Martok


Mathematiker - Do 23.05.13 23:36

Hallo,
vielleicht äußere ich mich jetzt zu einer Sache, von der ich mit meinem Delphi 5 eigentlich keine Ahnung habe. Wenn ja, so seht es mir bitte nach.
Da Delphi 5 diese spezielle Art von type nicht kennt, habe ich herumexperimentiert und bin auf

Delphi-Quelltext
1:
2:
3:
4:
type
   TEnum = (eval1,eval2,eval3,eval4);
const
   MyTEnum: array[TENum] of integer = ($f000,$f002,$f004,$f015);

gekommen. length(MyTEnum) gibt dann die Anzahl der Elemente korrekt wieder.
Riesiger Nachteil: die Bezeichner und zugewiesenen Werte sind getrennt, aber es funktioniert. Blöd ist auch, dass ich MyTEnum[eval1] usw. verwenden muss.

Mehr weiß ich nicht. Wahrscheinlich ist die Idee auch nicht neu. :oops:

Beste Grüße
Mathematiker