Thema: Delphi Generics und Enums

Einzelnen Beitrag anzeigen

Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#1

Generics und Enums

  Alt 9. Sep 2015, 02:49
Delphi-Version: XE8
Ich versuche mich grade an Generics. Da ich viel mit Enums arbeite, habe ich versucht diese beiden Dinge zu kombinieren. Als TypeParameter möchte ich also ein Enum angeben. Das kann ich hervorragend definieren, aber ich kann in einer Funktion diese Parameter nicht auswerten.

Hier mal ein Beispielcode:

Delphi-Quellcode:
unit genericstest;

interface

type
  TblubItems1 = (ti1a, ti1b, ti1c, ti1d, ti1f);
  TblubItems2 = (ti2a, ti2b, ti2c, ti2d, ti2f, ti2g);

type
  TGenericstest<TBlubItems> = class(TObject)
  public
    function count:integer;
    function IndexFromItem(aItem:TBlubItems):integer;
  end;

  TGenericstestBlub1 = class(TGenericstest<TblubItems1>);
  TGenericstestBlub2 = class(TGenericstest<TblubItems2>);

implementation

{ TGenericstest<TBlubItems> }

function TGenericstest<TBlubItems>.count: integer;
begin
  // Was hier rein setzen, um die Anzahl der Items im Aufzählungstyp zu ermitteln
  // Bei TblubItems1 muss das Ergebnis 5 sein.
  // Bei TblubItems2 muss das Ergebnis 6 sein.
end;

function TGenericstest<TBlubItems>.IndexFromItem(aItem: TBlubItems): integer;
begin
  // Was hier rein setzen, um den Index eines Items im Aufzählungstyp zu ermitteln.
  // Bei aItem = ti1a muss das Ergebnis 0 sein.
  // Bei aItem = ti2c muss das Ergebnis 2 sein.
end;

end.
Ich kann diese Objekte Erzeugen und anwenden.

Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  lGenericstestBlub1 : TGenericstestBlub1;
  lGenericstestBlub2 : TGenericstestBlub2;
begin
  lGenericstestBlub1 := TGenericstestBlub1.create;
  lGenericstestBlub2 := TGenericstestBlub2.create;

  ListBox1.items.add(inttostr(lGenericstestBlub1.IndexFromItem(ti1a)));
  ListBox1.items.add(inttostr(lGenericstestBlub2.IndexFromItem(ti2b)));

  lGenericstestBlub1.free;
  lGenericstestBlub2.Free;
end;
Aber was nützt mir das, wenn ich in der Funktion IndexFromItem oder Count den übergebenen Typen nicht auswerten kann.

Ich habe schon in einem anderen Beitrag gesehen, das Generics und Enums nicht wirklich zusammen passen sollen. Aber der Beitrag ist von 2010. Vieleicht hat sich ja im Sprachumfang noch etwas geändert.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat