![]() |
AW: Konstantes Array of Record deklarieren
Auch das Thema mehrere Entwickler und Mergen, spielt gern eine Rolle.
Zwei Kollegen fügen je eine "Zeile" / Eintrag hinzu, dann müssten sie ja, bei einem statischen Array die Größe definieren, was sich nach dem Merge aber wiederspricht. |
AW: Konstantes Array of Record deklarieren
Zitat:
Delphi-Quellcode:
oder
array of T
Delphi-Quellcode:
Variablen oder Parameter.
TArray<T>
Die Technik hinter einem "konstanten dynamischen" Array ist dieselbe, wie bei einem konstanten String bzw Stringliteral - der Compiler legt dadurch, dass er -1 in das RefCount Feld schreibt, fest, dass es sich um eine "Konstante" handelt, von der in bestimmten Fällen eine Kopie gemacht werden muss. Zitat:
Delphi-Quellcode:
E2026 Constant expression expected
|
AW: Konstantes Array of Record deklarieren
Zitat:
Das Gegenteil von statisch ist dynamisch. Zumindest in dieser Konstellation, und es ist wichtig, dass du genau darauf achtest. Es gibt folgende Konstellationen:
Der einzige Unterschied für den Programmierer ist, dass du bei dynamischen Arrays keine Länge angeben brauchst, sondern diese automatisch gesetzt wird (damals brauchte man
Delphi-Quellcode:
, das geht heute aber auch ohne):
SetLength
Delphi-Quellcode:
Genau das gleiche trifft auch auf die Konstanten zu: Hier ist der einzige Unterschied, dass du keine explizite Längenangabe in der Deklaration mehr brauchst.*
var
A: array of Byte; begin // früher: // SetLength(A, 2); // A[0] := -128; // A[1] := 127; // oder, falls man einen Typen hatte: // A := TBytes.Create(-128, 127); // Braucht man heute alles nicht mehr, einfach: A := [-128, 127]; end; *) Und noch ein paar Unterschiede in der Speicherverwaltung, aber die sind jetzt mal egal. Hinzu kommt noch ein Sonderfall: Dynamische Array-Inline-Konstanten. Darauf wollte ich jetzt eigentlich nicht eingehen, aber weil es anscheinend doch noch zu einer belebten Diskussion gekommen ist, hier mal ein Lösungsansatz:
Delphi-Quellcode:
So geht das theoretisch. Ob es jetzt geiler ist als da eben eine Länge vor zu schreiben muss jeder für sich selbst entscheiden.
type
TKameraTypRec = record Name: string; Breite: Integer; Hoehe: Integer; PixelSizeX: Extended; PixelSizeY: Extended; // Implementierung der Factory-Methode dürfte selbsterklärend sein: class function Create(const AName: String; const ABreite, AHoehe: Integer; const APixelsSizeX, APixelsSizeY: Extended): TKameraTypRec; static; // Du kannst natürlich stattdessen auch eine globale Routine nehmen, ist ja das selbe wie eine statische Klassenfunktion end; begin const CAM_TYPES: TKameraTypArr {Typen könntest du dank Inferenz sogar weglassen, lol} = [ TKameraTypRec.Create('GT1920', 1920, 1080, 0.00000586, 0.00000586) ]; // ... end. |
AW: Konstantes Array of Record deklarieren
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 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