Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Generics in Delphi (https://www.delphipraxis.net/143894-generics-delphi.html)

Neutral General 25. Nov 2009 16:31


Generics in Delphi
 
Hi,

Gibt es irgendwo eine wirklich ausführliche, alles erklärende Dokumentation der Generics in Delphi? Die Grundlagen kann ich ja, aber jetzt habe ich mal folgendes versucht:

Delphi-Quellcode:
type
  TBeispiel<T: Class>
  private
    FTest: T;
  public
    procedure TestProc;
  end;

implementation

procedure TBeispiel<T>.TestProc;
begin
  FTest := T.Create;
end;
Eigentlich sogar recht logisch, dass das nicht funktioniert, aber bekomme dann folgende Meldung von Delphi:

Zitat:

[DCC Fehler] Neue Instanz kann ohne CONSTRUCTOR-Einschränkung in der Typparameterdeklaration nicht erstellt werden
Es geht also scheinbar doch irgendwie. Aber diese Meldung sagt mir leider überhaupt nichts und ich finde im Internet weder zu dieser Meldung noch zu Generics in Delphi eine (wie oben schon gesagt) umfassende Dokumentation und Erklärung.

Gruß
Neutral General

Daniel 25. Nov 2009 16:35

Re: Generics in Delphi
 
Versuche es mal mit
Delphi-Quellcode:
<T : Constructor >
Damit schränkst Du die Typenvielfalt ein und forderst, dass das, was da kommen mag, auf jeden Fall einen Kontruktor besitzen muss.

Neutral General 25. Nov 2009 16:58

Re: Generics in Delphi
 
Ok Danke ;)

Aber gibts trotzdem nicht irgendwo ne ausführliche Dokumentation über die Generics? Damit man mal nen Überblick hat was möglich ist und wies geht.

Hawkeye219 25. Nov 2009 18:18

Re: Generics in Delphi
 
Hallo Michael,

Marco Cantù hat eine kleine Einführung geschrieben, die du bei Embarcadero herunterladen kannst: klick

Gruß Hawkeye

Neutral General 27. Nov 2009 08:27

Re: Generics in Delphi
 
Hi,

Habe gerade ein kleines Problem...

EDIT: Und die Lösung lautet:

Delphi-Quellcode:
Result := Default(T);
=====

Delphi-Quellcode:
IAssignable = interface(IUnknown)
  procedure Assign(AObject: TObject);
end;

TMeineKlasse<T: Class, Constructor, IAssignable> = class;
Funktioniert prinzipiell wunderbar. Aber ich habe dann folgendes in meinem Code:

Delphi-Quellcode:
function TMeineKlasse<T>.GetT: T;
begin
  if FIndex = -1 then
    Result := nil
  else
    Result := FData[FIndex];
end;
Das funktioniert allerdings nur wenn ich IAssignable aus den Einschränkungen entferne...

So funktioniert es:
Delphi-Quellcode:
TMeineKlasse<T: Class, Constructor> = class;
Und so
Delphi-Quellcode:
TMeineKlasse<T: Class, Constructor, IAssignable> = class;
bekomme ich die Fehlermeldung

Zitat:

[DCC Fehler] Inkompatible Typen: 'T' und 'Pointer'
in der Zeile

Delphi-Quellcode:
Result := nil
Das finde ich ziemlich...blöd! Wieso funktioniert das denn jetzt nicht mehr? -.-

Gruß
Neutral General

generic 27. Nov 2009 14:59

Re: Generics in Delphi
 
Hier steht auch noch etwas zu "generics".

http://info.codegear.de/newsletter/n...hiGenerics.htm


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz