Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   "Datentyp" record end wer kennt ihn? (https://www.delphipraxis.net/216286-datentyp-record-end-wer-kennt-ihn.html)

Uwe Raabe 4. Dez 2024 14:47

AW: "Datentyp" record end wer kennt ihn?
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1543861)
ein leerer inline deklarierter Record...

Eigentlich ist das nur ein Trick um einen Feldnamen für die Daten zu bekommen, die an der Stelle noch unbekannt sind.
Delphi-Quellcode:
function TVirtualNode.GetData(): Pointer;

// Returns the associated data converted to the class given in the generic part of the function.

begin
  Result := @Self.Data;
  Include(States, vsOnFreeNodeCallRequired);
end;
Oder wer's lieber generisch mag (bin gar nicht sicher, ob das wirklich nur für Klassen gilt :gruebel:):
Delphi-Quellcode:
function TVirtualNode.GetData<T>: T;

// Returns the associated data converted to the class given in the generic part of the function.

begin
  Result := T(Pointer((PByte(@(Self.Data))))^);
  Include(States, vsOnFreeNodeCallRequired);
end;

himitsu 4. Dez 2024 16:09

AW: "Datentyp" record end wer kennt ihn?
 
Es gibt in einigen API/Records oftmals Daten hinter dem Record, z.B. im Record nur NameLen und dann "eigentlich" hinter dem Record stehen die Chars des Namen.

Um im Speicher einen Zeiger auf den Namen zu haben, verwenden Viele gern sowas, aber auch
Delphi-Quellcode:
char[0] name
, was sich so aber nicht nach Delphi konvertieren lässt, da char[0] "keine Chars" bedeutet, aber ein
Delphi-Quellcode:
name: array[0..0] of AnsiChar
halt "1 Char" ergibt, womit der Record in Delphi eine falsche Größe besitzt.

Dennis07 11. Dez 2024 13:55

AW: "Datentyp" record end wer kennt ihn?
 
Ich nutze das manchmal als leeren Typen für Typparameter generischer Typen, wenn der Typparameter egal ist. Angenommen du hast so einen Typen:
Delphi-Quellcode:
TMyGen<T> = class
  const Value = 5.56;
end;
Und du deklarierst einen leeren Typen
Delphi-Quellcode:
TNil
irgendwo:
Delphi-Quellcode:
TNil = record
end;
Und du willst jetzt nicht unbedingt irgendeinen spezifischen Typparameter für
Delphi-Quellcode:
TMyGen<T>
festlegen, dann kannst du mit einem "leeren" typen so auf
Delphi-Quellcode:
Value
zugleifen:
Delphi-Quellcode:
TMyGen<TNil>.Value
Ich finde, so einen void-typen mit der Größe 0 (
Delphi-Quellcode:
SizeOf(TNil)
ergibt ja
Delphi-Quellcode:
0
) sollte es standardmäßig in SysUtils oder so geben.


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

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