Forum: Algorithmen, Datenstrukturen und Klassendesign
by Zacherl,
23. Aug 2017
So in der Art vielleicht:
procedure TForm1.Test<T>;
var
TypeInfo: PTypeInfo;
TypeData: PTypeData;
I: Integer;
V: T;
begin
TypeInfo := System.TypeInfo(T);
Assert(Assigned(TypeInfo) and (TypeInfo^.Kind = tkEnumeration));
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Zacherl,
23. Aug 2017
Schau mal in meinen Edit.
Im Grunde hast du allerdings nur die Möglichkeit über die Ordinalwerte zu iterieren und dann ggfls. wieder in den expliziten Typ zu hardcasten.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Zacherl,
23. Aug 2017
Dann schau dir mal TRttiEnumerationType an. GetMinValue und GetMaxValue sind zwar leider private, aber folgende Methoden könnten dir evtl. schon reichen:
function GetNames: TArray<string>;
class function GetName<T{: enum}>(AValue: T): string; reintroduce; static;
class function GetValue<T{: enum}>(const AName: string): T; static;
Ansonsten hätte ich hier noch eine Möglichkeit explizit an...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Zacherl,
23. Aug 2017
Kommt drauf an, was genau du machen willst, also konkreter gesagt, in welcher Form du die einzelnen Werte weiterverwenden willst.