Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Cast eines Arrays auf einen Arraytyp bedenklich?

  Alt 15. Sep 2014, 22:06
Typen müssen nunmal identisch sein.
Delphi-Quellcode:
type
  TRecordArray = Array of TRecord; // geht natürlich nicht, da TRecord noch nicht deklariert ist und Forward-Deklarationen bei arrays nicht möglich sind (Größe/SizeOf muß vorhanden sein)
  TRecord = record
    // .. Daten
    RecordArray: TRecordArray;
  end;
Deine Definitionen sind zwar "intern gleich", aber nicht "identisch".
Jemand mit der selben DNA (Bauplan) wie du, ist ja dennoch nicht du.

Der Cast sollte kein Problem sein, da die Typen ja intern gleich, aber eben nicht der "selbe" Typ sind.

Sowas geht vermutlich auch nicht?
Delphi-Quellcode:
type
  TRecord = record
  public type
    TRecordArray = Array of TRecord;
  public
    // .. Daten
    RecordArray: TRecordArray;
  end;

procedure Irgendwas(var ARecords: TRecord.TRecordArray);
Am Sichersten wären hier wohl Pointertypen oder Objekte, welche als Forward deklariert werden können.
Oder du übergibst deinem Irgendwas nicht das Array, sondern den übergeordneten Record.



Funktioniert auch, aber von der Typsicherheit her ein Graus, da man ja "alles" übergeben kann.
Delphi-Quellcode:
procedure Irgendwas(var ARecords);
begin
  SetLength(TRecordArray(ARecords), 123);
  // Array wird gefüllt
end;

procedure Irgendwas(var ARecords);
var
  TheRecords: TRecordArray absolute ARecords;
begin
  SetLength(TheRecords, 123);
  // Array wird gefüllt
end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (15. Sep 2014 um 22:15 Uhr)
  Mit Zitat antworten Zitat