![]() |
Delphi-Version: 10.3 Rio
Alias (Interposer forward) für Generics
Hallo zusammen,
eine Frage an die Sprachexperten. Ich habe in einer Unit eine Typdefinition, wie zum Beispiel:
Delphi-Quellcode:
type
TGenericsKlasse< TResult> = reference to procedure ( AResult : TResult ); Jetzt möchte ich diesen Typen in einer anderen Unit nutzen, und erneut definieren um diesen Typen 1:1 weiterzuleiten. (Mangels einer besseren Bezeichnung nenne ich das Verfahren "interposer forward"). Edit: Wie oben korrigiert, nennt man den Konstrukt besser Type "Alias". Das sieht normalerweise bei so aus:
Delphi-Quellcode:
Das funktionier Alles wunderbar.
type
TNormaleKlasse = Aus.Einer.Anderen.Unit.TNormaleKlasse; // interposer forward Versuche ich das aber mit Generics, schon funktionert das Ganze so einfach nicht mehr:
Delphi-Quellcode:
type
TGenericsKlasse = Aus.Einer.Anderen.Unit.TGenericsKlasse; //interposer forward geht so nicht TGenericsKlasse<T> = Aus.Einer.Anderen.Unit.TGenericsKlasse<T>; //Neee, so auch nicht Gibt es da irgendeinen schönen Trick oder eine andere Konfiguration der Klassen um das gewünschte Ergebnis doch hinzubekommen ? |
AW: Interposer forward für Generics
Zitat:
|
AW: Interposer forward für Generics
Was du meinst ist ein "Alias".
Du musst den Typparameter schon immer ausfüllen. Heißt: Angenommen du definierst
Delphi-Quellcode:
Dann existiert TStuff nicht. Es gibt TStuff<Byte>, TStuff<TObject> und was auch immer, aber auch nur das.
TStuff<T> = reference to procedure(out Result: T);
Definiert doch den Typen einmal in einer Unit und verwende die dann. Das hinter x verschiedenen Bezeichnungen bekannt zu machen hilft der Übersicht wirklich nicht. |
AW: Interposer forward für Generics
Zitat:
Alias: auch gut. Mit den offiziellen Bezeichnungen stehe ich manchmal auf Kriegsfuß, für mich sind "Generics" auch noch "Templates" (C++) :stupid: Das die Anwenung einen <T> Type braucht ist klar, aber die Definition würde ich gerne weitergeben an eine zentrale Manager-Unit. Ich versuche meine Projekte möglichst stark zu modularisieren, aber würde dann manchmal gewisse "Standardtypen" der Bequemlichkeit halber weiterreichen. |
AW: Interposer forward für Generics
Die generische Deklaration ist "noch" kein Typ und du kannst nur für "fertige" Typen einen Alias erstellen.
Hast du eine Ableitung des Generics, dann klappt es, aber ist wohl nicht das hier Gewünschte.
Delphi-Quellcode:
type
TMyGenericsProc<TResult> = reference to procedure(AResult: TResult); TMyGenericsStringProc = TMyGenericsProc<string>;
Delphi-Quellcode:
Bei Typen mit einer Vererbungshierarchie ginge es aber, allerdings nicht als Alias, sondern nur als neuer generischer Typ (Nachfahre).
type
TMyGenericsStringProc = OtherUnit.TMyGenericsStringProc; type TMyGenericsStringProc = {OtherUnit.}TMyGenericsProc<string>;
Delphi-Quellcode:
type
TMyGenericsClass<TResult> = class X: TResult; end; TMyGenericsStringClass = TMyGenericsClass<string>;
Delphi-Quellcode:
type
//TMyGenericsClass<T> = OtherUnit.TMyGenericsClass<T>; // nein //TMyGenericsClass<T> = type OtherUnit.TMyGenericsClass<T>; // auch nicht TMyGenericsClass<T> = class(OtherUnit.TMyGenericsClass<T>); type TMyGenericsStringClass = {OtherUnit.}TMyGenericsClass<string>; |
AW: Alias (Interposer forward) für Generics
Hallo,
Zitat:
Und um zu den Templates in C++ (Vorlagen) zu kommen. Das Wort Vorlagen ist besser gewählt. Es sind Vorlagen zu Typen, keine Typen selbst. |
AW: Alias (Interposer forward) für Generics
Hallo himitsu,
ja dankesehr, das die Generics noch nicht ausdefiniert sind macht Sinn. Ich hätte ja auch nur gehofft das es einen Trick/Hack oder ähnlich dazu gegeben hätte, um diese Vorlage weiterzureichen. Die ausdefinierten Klassen lassen sich natürlich weiterreichen, so mache ich es ja auch.
Delphi-Quellcode:
type
TMyGenericsStringClass = TMyGenericsClass<string>; |
AW: Alias (Interposer forward) für Generics
Geht nicht und wird vermutlich auch so bald nicht kommen - siehe
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 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