AGB  ·  Datenschutz  ·  Impressum  







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

Generische Klasse vs. generische Methode

Ein Thema von s.h.a.r.k · begonnen am 7. Jun 2010 · letzter Beitrag vom 9. Jun 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Generische Klasse vs. generische Methode

  Alt 7. Jun 2010, 19:27
Delphi-Version: 2010
Hallo,

und schon wieder gibts ein Problem mit Generics. Ich hatte mir eine Klasse erstellt, die so ziemlich alles mit Arrays anstellen kann, was ich brauche. Diese Klasse habe ich nur mit statischen Klassen-Methoden gefüllt, wobei die Klasse selbst dann generisch war. Hier ein vereinfachter Code:

Delphi-Quellcode:
type
  TStaticClassA = class
  public
    function GenericLow<T>(const A: TArray<T>): Integer;
  end;

  TStaticClassB<T> = class
  public
    function GenericLow(const A: TArray<T>): Integer;
  end;

// =============================

{ TStaticClassA }

function TStaticClassA.GenericLow<T>(const A: TArray<T>): Integer;
begin
  Result := Low(A);
end;

{ TStaticClassB<T> }

function TStaticClassB<T>.GenericLow(const A: TArray<T>): Integer;
begin
  Result := Low(A); // <- [DCC Fehler] Unit1.pas(45): E2008 Inkompatible Typen
end;
Ich habe im Quelltext die Zeile markiert und mit einem Kommentar versehen, in der der Compiler einen Fehler meldet. Meine Frage ist, warum geht das denn bitte nicht? Es ist doch an sich nichts anderes, oder habe ich da was nicht verstanden.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Generische Klasse vs. generische Methode

  Alt 7. Jun 2010, 19:42
Der Compiler weiß an dieser Stelle noch nicht, daß es sich um ein Array handelt und demnach geht sowas nicht.

Delphi-Quellcode:
TStaticClass = class
public
  function GenericLow<AType>(const A: array of AType): Integer;
end;

TGenericClass<AType> = class
private
  type TArrayA = array of AType;
public
  function Low(const A: TArrayA): Integer;
  //oder als open-array
  function Low(const A: array of AType): Integer;
end;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

AW: Generische Klasse vs. generische Methode

  Alt 7. Jun 2010, 19:43
Aber warum sollte der Compiler das noch nicht wissen?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Generische Klasse vs. generische Methode

  Alt 7. Jun 2010, 19:55
Wie sollte er beim Parsen von "T" darauf kommen, daß du dafür später mal ein Array übergibst?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

AW: Generische Klasse vs. generische Methode

  Alt 7. Jun 2010, 20:10
Es steht doch dran, dass es ein Array vom Typ T ist (TArray<T>). Oder stehe ich gerade auf dem Schlauch!?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Generische Klasse vs. generische Methode

  Alt 7. Jun 2010, 22:35
Oh, TArray<T> kennt Delphi ja wirklich ... ja dann ... hmmm ... vielleicht immernoch ein paar Kinderkrankheiten.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Generische Klasse vs. generische Methode

  Alt 7. Jun 2010, 22:37
Naja. Delphi kennt vllt. TArray<> aber das ändert nichts daran, dass TArray eine Klasse ist die ein Array kapselt und kein Array. Von daher klappt Low auch nicht. Du übergibst ja ein Objekt und kein Array Inkompatible Typen
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Generische Klasse vs. generische Methode

  Alt 7. Jun 2010, 22:44
Klasse?

TArray<T> = array of T; Kann aber gut sein, daß die Generics den Array-Typen "verstecken"
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Generische Klasse vs. generische Methode

  Alt 7. Jun 2010, 22:45
Mh.. Oh.

Nagut. Dann kann ich es mir auch nicht erklären
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#10

AW: Generische Klasse vs. generische Methode

  Alt 7. Jun 2010, 22:57
Genau das ist ja auch das Problem, welches ich habe. Es wirkt irgendwie sehr strange. Ich wüsste auch nicht, wie man sowas sinnvoll umschiffen könnte. Aber eigentlich fängtTArray<T> doch immer bei 0 an, da es ein dynamisches Array ist, oder?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:34 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