AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie dynamischer Vorfahr für generische Klasse?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie dynamischer Vorfahr für generische Klasse?

Ein Thema von himitsu · begonnen am 15. Mär 2010 · letzter Beitrag vom 15. Mär 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#1

Re: Wie dynamischer Vorfahr für generische Klasse?

  Alt 15. Mär 2010, 13:33
Zitat von Phoenix:
Dafür sind Generics aber nicht gedacht.
Och menno.

Nja, ich hab mir hier halt ein Problem geschaffen
und versuche dafür nun eine "nette" Lösung zu finden.


Nja, ich werde noch etwas rumspielen ... mal sehn, vielleicht finde ich ja noch eine andere Lösung, außer dem Interface.



Ich spiele grad so ein bissl rum und probiere mehreres aus.

So war ich erstmal bei den "kleineren" Records gelandet, aber so wie es aussieht, werde ich wohl oder übel auf Klassen umsteigen müssen, weswegen ich dann auf das oben genannte "Problem" gekommen bin.

Delphi-Quellcode:
PMyRec = ^TMyRec<Typ: record>; // <<< geht natürlich nicht
                                // aber das war ja klar
TMyRec<Typ: Record> = record
  type PTyp = ^Typ; // <<< geht
  {...}
end;
Allerdings geht auch das nicht, obwohl hier Typ ja bekannt wäre.
Delphi-Quellcode:
TMyRec<Typ: record> = record
  type PMyRec = ^TMyRec<Typ>; // <<< geht nicht
    PTyp = ^Typ; // <<< geht
  {...}
end;
Wie soll man da einen Pointer deklarieren, welchen auch der generische Teil kennt?

OK, außer man macht es umständlicher extern,
welches aber nicht unbedingt eine "fehlerunanfälligere" Deklaration erfordert.
Delphi-Quellcode:
TMyRec<Typ: record; PRec> = record
  type PMyRec = PRec;
    PTyp = ^Typ;
  {...}
end;

PTest = ^TTest;
TTest = TMyRec<Integer, PTest>;
Und da Records keine Vererbung kennen, kann man hier ja keinen genaueren Typen festlegen, welcher dann ein "Value" kennt:
Delphi-Quellcode:
TMyRec<Typ: record> = record
  x: Typ;
  function Test: Integer;
end;

function TMyRec<Typ>.Test: Integer;
begin
  Result := X.Value; // <<< geht nicht
end;
Selbst wenn sichergestellt ist, daß der Record "Typ" einen Wert "Value" besietzt, geht dieses nicht,
da der Compiler dennoch meckert, daß "Value" nicht bekannt sei.

[add]
Und Generics für Helper gehn leider auch nicht.
Delphi-Quellcode:
TMyRec<Typ: Record> = Record Helper for Typ
  ...
end;

TMyCls<Typ: Class> = Class Helper for Typ
  ...
end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz