Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Generisches ToString für Enumerations

  Alt 30. Apr 2011, 14:25
Delphi-Version: XE
Hallo zusammen,

habe gerade mal wieder ein Problem bzgl. meiner Log-Klasse. Ich hätte gerne folgendes:
Delphi-Quellcode:
type
  TTestEnum = (teOne, teTwo, teThree {...});
  TTestEnumSet = set of TTestEnum;

var
  a : TTestEnum;
  b : TTestEnumSet;
begin
  a := teOne;
  TLog.Add(a); // -> liefert dann den String "teOne"

  // DAS HIER MAL NICHT BEACHTEN!!!
  //b := [teTwo, teThree];
  //TLog.Add(b); // -> Liefert den String "[teTwo, teThree]"
end;
Das Problem hierbei ist ja, dass die Add-Methode keine Ahnung von TTestEnum hat, d.h. ich sollte diese generisch gestalten, was an sich ja kein Problem wäre. Jetzt kommt allerdings das ABER: bei Generics gibts ja keine Einschränkung, dass ich eben nur Enumeration-Typen übergeben kann und somit funktioniert folgendes ja nicht:
Delphi-Quellcode:
uses
  TypInfo;

procedure TLog.Add<T>(Value: T);
var
  s : string;
begin
  s := GetEnumName(TypeInfo(T), Integer(Value)); // <- [DCC Fehler] Project1.dpr(27): E2089 Ungültige Typumwandlung
  { ... }
end;
Habt ihr eine Idee, wie man das Dilemma umgehen kann?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)

Geändert von s.h.a.r.k (30. Apr 2011 um 14:57 Uhr)
  Mit Zitat antworten Zitat