Autor Beitrag
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 23.05.13 17:46 
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:
ausblenden 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.
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

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."

Für diesen Beitrag haben gedankt: Dude566, Narses
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1448

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: 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
ausblenden 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

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein