AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Alias (Interposer forward) für Generics

Ein Thema von Rollo62 · begonnen am 14. Feb 2020 · letzter Beitrag vom 19. Feb 2020
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.075 Beiträge
 
Delphi 12 Athens
 
#1

Alias (Interposer forward) für Generics

  Alt 14. Feb 2020, 09:58
Delphi-Version: 10.3 Rio
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:
type
    TNormaleKlasse = Aus.Einer.Anderen.Unit.TNormaleKlasse; // interposer forward
Das funktionier Alles wunderbar.


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 ?

Geändert von Rollo62 (14. Feb 2020 um 14:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#2

AW: Interposer forward für Generics

  Alt 14. Feb 2020, 10:07
Zitat:
Delphi-Version: 5
...Generics?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Interposer forward für Generics

  Alt 14. Feb 2020, 10:30
Was du meinst ist ein "Alias".

Du musst den Typparameter schon immer ausfüllen.

Heißt:

Angenommen du definierst TStuff<T> = reference to procedure(out Result: T); Dann existiert TStuff nicht. Es gibt TStuff<Byte>, TStuff<TObject> und was auch immer, aber auch nur das.


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.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.075 Beiträge
 
Delphi 12 Athens
 
#4

AW: Interposer forward für Generics

  Alt 14. Feb 2020, 14:00
Zitat:
Delphi-Version: 5
...Generics?
Jetzt ists richtig, habe die kleine Checkbox übersehen ..

Alias: auch gut.
Mit den offiziellen Bezeichnungen stehe ich manchmal auf Kriegsfuß, für mich sind "Generics" auch noch "Templates" (C++)

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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Interposer forward für Generics

  Alt 14. Feb 2020, 17:28
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:
type
  TMyGenericsStringProc = OtherUnit.TMyGenericsStringProc;

type
  TMyGenericsStringProc = {OtherUnit.}TMyGenericsProc<string>;
Bei Typen mit einer Vererbungshierarchie ginge es aber, allerdings nicht als Alias, sondern nur als neuer generischer Typ (Nachfahre).
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>;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (14. Feb 2020 um 17:31 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Alias (Interposer forward) für Generics

  Alt 14. Feb 2020, 17:42
Hallo,
Zitat:
Die generische Deklaration ist "noch" kein Typ und du kannst nur für "fertige" Typen einen Alias erstellen.
Genau.

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.
Heiko
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.075 Beiträge
 
Delphi 12 Athens
 
#7

AW: Alias (Interposer forward) für Generics

  Alt 18. Feb 2020, 16:29
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>;
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Alias (Interposer forward) für Generics

  Alt 19. Feb 2020, 10:28
Geht nicht und wird vermutlich auch so bald nicht kommen - siehe https://quality.embarcadero.com/browse/RSP-27505
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  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 06:24 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