Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Statisch Array in der abgeleiteten Klasse verändern? (https://www.delphipraxis.net/198180-statisch-array-der-abgeleiteten-klasse-veraendern.html)

cocsy 10. Okt 2018 19:24

Statisch Array in der abgeleiteten Klasse verändern?
 
Ich habe folgendes Problem!

Delphi-Quellcode:
TClassA = class(TObject)
public
  const
    aSIZE = 2048;
  type
    TLineA = array [0 .. aSIZE] of Single; // und ca 20 weitere spezielle Typen die abhängig von aSize sind
    ....
public
  function....
  function....
  function....
  function....
end;
die Funktionen sind alle abhängig von aSize und TLineA und...

Benötigt wird TClassB, genauso wie TClassA mit aSize=1024, wobei ich nicht alle Funktionen von TClassA ein zweites mal implementieren will.

da ich eigentlich die Typen nicht dynamisch machen will (aus Sicht der Optimierung) stehe ich hier auf dem schlauch wie ich am besten vorgehen soll.

cocsy 10. Okt 2018 19:26

AW: Statisch Array in der abgeleiteten Klasse verändern?
 
folgendes geht nicht

Delphi-Quellcode:
TClassA = class(TObject)
public
  const
    aSIZE : Integer = 2048;
    ....
end;

cocsy 10. Okt 2018 19:29

AW: Statisch Array in der abgeleiteten Klasse verändern?
 
folgendes geht auch nicht.

Delphi-Quellcode:
  TSizeOfInt = class(TObject)
  public
    const
    aSize : Integer = 2048;
// und auch nicht über eine -->>  class function aSize : Integer; virtual; abstract;
  end;

TClassA<SizeOfInt : record> = class(TObject)
public
  type
    TLineA = array [0 .. SizeOfInt.aSIZE] of Single; // und ca 20 weitere spezielle Typen die abhängig von aSize sind
    ....
end;

Redeemer 10. Okt 2018 20:03

AW: Statisch Array in der abgeleiteten Klasse verändern?
 
Liste der Anhänge anzeigen (Anzahl: 1)
und auch folgendes geht nicht.

p80286 10. Okt 2018 20:42

AW: Statisch Array in der abgeleiteten Klasse verändern?
 
Nun, wenn der TE seinen Schwerpunkt in der ausufernden Aneinanderreihung von Wörtern gesetzt hätte, dann würde er nicht programmieren sondern z.B. in einer Zeitung arbeiten.
Ich nehme an es geht ihm um solche Konstrukte

Delphi-Quellcode:
const
  max=1024;

type
  t1 : Array [0..max] of Byte;
  t2 : Array [0..max] of Char;
  t3 : Array [0..max] of irgendeintyp;
wobei max verschiede Werte annehmen kann/soll.
Und diese Änderung soll wohl während der Laufzeit erfolgen.

Gruß
K-H

cocsy 11. Okt 2018 07:35

AW: Statisch Array in der abgeleiteten Klasse verändern?
 
Zitat:

Zitat von p80286 (Beitrag 1415448)
...
Delphi-Quellcode:
const
  max=1024;

type
  t1 : Array [0..max] of Byte;
  t2 : Array [0..max] of Char;
  t3 : Array [0..max] of irgendeintyp;
wobei max verschiede Werte annehmen kann/soll.
Und diese Änderung soll wohl während der Laufzeit erfolgen.

Gruß
K-H

Eigentlich schon steht schon zur Compilezeit fest wie groß "max" ist. Ich denke das es mit Generika auch gehen müsste, zumindest in C++ geht es.

ZOD 11. Okt 2018 07:38

AW: Statisch Array in der abgeleiteten Klasse verändern?
 
Zitat:

Eigentlich schon steht schon zur Compilezeit fest wie groß "max" ist.
nur als Idee:
bedingte Compilierung?

cocsy 11. Okt 2018 08:25

AW: Statisch Array in der abgeleiteten Klasse verändern?
 
TClassA und TClassB werden parallel benötigt, deswegen würde eine beidingte Compelierung nicht funktionieren.

Zacherl 11. Okt 2018 12:25

AW: Statisch Array in der abgeleiteten Klasse verändern?
 
Zitat:

Zitat von cocsy (Beitrag 1415465)
Ich denke das es mit Generika auch gehen müsste, zumindest in C++ geht es.

Jap, mit den C++ Templates funktioniert sowas wunderschön, weil Diese den Code der resultierenden Klasse intelligent für die Typen erzeugen, die mindestens einmal als Template-Argument verwendet wurden. So wird beim Deklarieren von
Delphi-Quellcode:
MyClass<std::string>
und
Delphi-Quellcode:
MyClass<std::uint32_t>
einmal das Gerüst für
Delphi-Quellcode:
std::string
und einmal das Gerüst für
Delphi-Quellcode:
std::uint32_t
erzeugt. Oder wie deinem Falle würde auch
Delphi-Quellcode:
MyClass<4>
bzw.
Delphi-Quellcode:
MyClass<8>
zwei verschiedene Klassen erzeugen. Das sorgt natürlich für etwas größere Kompilate, eliminiert dafür aber sämtlichen runtime-overhead.

1. Problem:
Delphi erlaubt keine const-Expressions als Argument für Generics.

2. Problem:
Die Delphi Generics sind "dumm", unvollständig und in keiner Weise vergleichbar mit den funktionalen C++ Templates.

Delphi generiert für eine generische Klasse den Code nur einmalig. In Kombination damit, dass man keine gescheiten Constraints angeben kann, sorgt das für teils irrsinnige Konstrukte mit 1000 Pointer-Casts und Typechecks, damit der Compiler nicht wegen inkompatibler Typen meckert. Die Typechecks sind zwar teilweise mitlerweile Intrinsics und unbenutzte Fälle werden tatsächlich auch nicht mehr ins Kompilat aufgenommen, aber dennoch hat man nach wie vor runtime-overhead und zudem ist die Programmierung einer echten generischen Methode in der Regel eine Sisyphus-Aufgabe.

Deshalb: Vergiss es mit den Generics :stupid:

cocsy 11. Okt 2018 20:04

AW: Statisch Array in der abgeleiteten Klasse verändern?
 
schade, aber trotzdem Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:29 Uhr.
Seite 1 von 2  1 2      

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