AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein was ist der Sinn von Templates/Generics ?

was ist der Sinn von Templates/Generics ?

Ein Thema von paule32.jk · begonnen am 7. Okt 2024 · letzter Beitrag vom 9. Okt 2024
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.929 Beiträge
 
Delphi 12 Athens
 
#1

AW: was ist der Sinn von Templates/Generics ?

  Alt 7. Okt 2024, 19:02
Ein kleines Beispiel:
Delphi-Quellcode:
uses
  System.Generics.Collections;

type
  TMyValue<T> = class
  private
    FValue: T;
    procedure SetValue(const Value: T);
  public
    property Value: T read FValue write SetValue;
  end;

procedure Test;
var
  ValInteger: TMyValue<Integer>;
  ValList: TMyValue<TList<Integer>>;
begin
  ValInteger := TMyValue<Integer>.Create;
  try
    ValInteger.Value := 42;
    ShowMessage(ValInteger.Value.ToString);
  finally
    ValInteger.Free;
  end;

  ValList := TMyValue<TList<Integer>>.Create;
  try
    ValList.Value := TList<Integer>.Create;
    ValList.Value.Add(11);
    ValList.Value.Add(33);
    ValList.Value.Add(42);
    ShowMessage(ValList.Value[2].ToString);
  finally
    ValList.Free;
  end;
end;

procedure TMyValue<T>.SetValue(const Value: T);
begin
  FValue := Value;
end;
In echtem Code wird das natürlich deutlich umfangreicher. Aber für den Anfang sollte das reichen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: was ist der Sinn von Templates/Generics ?

  Alt 7. Okt 2024, 19:10
oh Danke.
dachte ich mirs doch: Generics = Vorlagen und Erweiterung von Cast/Pointern, so dass statt einen Pointer, ein konkreter Datentyp bezeichnet/gekennzeichnet wird.

macht Sinn...
anstelle mit Pointern zu jonglieren, ist dann durch Generics gewährleistet, welcher Typ verwendet wird...

ohne das jetzt getestet zu Haben:
- können Generics "vererbt" werden (also die Klassen durch Sub-Classing erweitert werden ?
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#3

AW: was ist der Sinn von Templates/Generics ?

  Alt 7. Okt 2024, 19:12
Hab ich zwar noch nicht gemacht, aber wieso sollte das nicht gehen? Man muss halt darauf achten, dass die Ableitung auch wieder generisch ist.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: was ist der Sinn von Templates/Generics ?

  Alt 7. Okt 2024, 20:07
Delphi-Quellcode:
TMyValue = class
  function GetValue<T>: T;
  procedure SetValue<T>(Value: T);
end;

TMyValue<T> = class
  function GetValue: T;
  procedure SetValue(Value: T);
end;


TMyValue<T> = class
  procedure Machwas<X>(Value: T; Other: X);
end;
Sie Weiteres auch in der OH/DocWiki.
* mehrere Typen können angegeben werden
* es können Einschränkungen Mindestanforderungen für diese Typen vorgegeben werben
* uvm.


Es kann sogar eine teilweise Automatik (Inferenz) genutzt, wo der Compiler z.B. anhand der übergebenen Variable das T selbst bestimmt.
Delphi-Quellcode:
MyValue.SetValue<Integer>(MyInt);
MyValue.SetValue(MyInt);
bei Value: T aber leider nicht bei Value: array of T
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: was ist der Sinn von Templates/Generics ?

  Alt 8. Okt 2024, 11:30
aber leider nicht bei Value: array of T
konnte ich mir schon Denken, da dies ein wenig blääedde ist ...
na gut, man kann nicht alles Haben (aber lieber auf der Bank ein Haben haben, als Soll zollen...)
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: was ist der Sinn von Templates/Generics ?

  Alt 8. Okt 2024, 11:50
Delphi-Quellcode:
type
    QChar<T> = class
    public
        type
        QChar_Category = (
            Mark_NonSpacing = 0,
            Mark_SpacingCombining = 1
        );
    private
        FCategory: QChar_Category;
    public
        constructor Create;
    published
        property Category: QChar_Category read FCategory default Other_NotAssigned;
    end;
bei oben stehenden Code erhalte ich dann die Meldung:

Code:
[dcc64 Fehler] QCharClass.pas(392): E2146 Standardwerte müssen vom Typ Ordinal, Pointer oder vom Typ small Set sein
und beim default Constructor erhalte ich dann:

Code:
constructor QChar.Create;
[dcc64 Fehler] QCharClass.pas(419): E2003 Undeklarierter Bezeichner: 'QChar'
constructor QChar<T>.Create; funktioniert dann wieder (als member function).

Ich habe das jetzt noch nicht weiter getestet; aber: dann ist ja auch:
Code:
foo := QChar.Create;
nicht möglich, weil, dann fehlt ja Typ, den man eigentlich mit <T> im Epilog des Klassen-Codes angegeben hat ?
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.929 Beiträge
 
Delphi 12 Athens
 
#7

AW: was ist der Sinn von Templates/Generics ?

  Alt 8. Okt 2024, 12:37
bei oben stehenden Code erhalte ich dann die Meldung:

Code:
[dcc64 Fehler] QCharClass.pas(392): E2146 Standardwerte müssen vom Typ Ordinal, Pointer oder vom Typ small Set sein
Das ist richtig, aber du kannst das ja auch im Code setzen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: was ist der Sinn von Templates/Generics ?

  Alt 8. Okt 2024, 11:59
Wie gesagt, man kann die Deklaration des Generics an den Typ/Klasse hängen, dann muß es immer angegeben werden, und betrifft die ganze Klasse.

Oder man hängt ihn an die Methode(n), wo es dann jeweils nur diese Methode betrifft und man den Typen selbst auch ohne nutzen kann.

Oder man definiert sich eben einen aufgelösten Alias Typen damit.
Delphi-Quellcode:
type
  QChar<T> = class
    ...
  end;

  QChar = QChar<string>;

konnte ich mir schon Denken, da dies ein wenig blääedde ist ...
Betrifft nur die Automatik ... wenn man das <xyz> angibt, dann geht's.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 8. Okt 2024 um 12:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: was ist der Sinn von Templates/Generics ?

  Alt 9. Okt 2024, 14:40
bei Value: T aber leider nicht bei Value: array of T
also ich habe jetzt folgendes vom Compiler übersetzen können:
Delphi-Quellcode:
constructor QChar<T>.Create(v: Array of T);
var
    i: Integer;
begin
    for i := 0 to High(v) do
    foo := v[i];
end;
irgendwie finde ich das Klasse, was man so machen kann - zumal man auch Code sparrt ...
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: was ist der Sinn von Templates/Generics ?

  Alt 9. Okt 2024, 15:13
Es kann sogar eine teilweise Automatik (Inferenz) genutzt werden, wo der Compiler z.B. anhand der übergebenen Variable das T selbst bestimmt.
Delphi-Quellcode:
MyValue.SetValue<Integer>(MyInt);
MyValue.SetValue(MyInt);
bei Value: T aber leider nicht bei Value: array of T
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:36 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