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/)
-   -   "Datentyp" record end wer kennt ihn? (https://www.delphipraxis.net/216286-datentyp-record-end-wer-kennt-ihn.html)

QuickAndDirty 4. Dez 2024 12:29

"Datentyp" record end wer kennt ihn?
 
Also ich kenne den Datentyp seit jetzt... vermutlich...

Delphi-Quellcode:
PServerHeader = ^TServerHeader;
TServerHeader= packed record
    Server:TAdresse;
    Port:Integer
    AlternativerServer: Record end;
  end;
Mann kann damit zumindest in dem code den ich mir auf github(https://github.com/lakeofsoft/vcp) angesehen habe und mit dem ich rumprobiert habe Header aus mehreren Records zusammen bauen...
Der Code sieht insgesamt so aus als wäre er Ergebnis eines C zu Pascal Transpilers.

Wer von euch kannte "Record End" schon vorher oder hat es fürher mal benutzt? Oder nutzt es heute noch?
gibt es eine bessere oder eben schönere Lösung?

Uwe Raabe 4. Dez 2024 12:50

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

Zitat von QuickAndDirty (Beitrag 1543846)
Wer von euch kannte "Record End" schon vorher oder hat es fürher mal benutzt? Oder nutzt es heute noch?

Das kenne ich schon ziemlich lange z.B. aus VirtualTreeView und es ist auch heute noch so drin:
Delphi-Quellcode:
  TVirtualNode = packed record
...
  private
    Data: record end;       // this is a placeholder, each node gets extra data determined by NodeDataSize
  public

freimatz 4. Dez 2024 13:19

AW: "Datentyp" record end wer kennt ihn?
 
Nun ja... Diese Syntax ist in Standard Pascal schon immer möglich gewesen. Es ist halt ein record und der Inhalt ist leer.
https://www.cs.kent.edu/~durand/CS43...ml#record-type

himitsu 4. Dez 2024 13:23

AW: "Datentyp" record end wer kennt ihn?
 
Jupp, das ist ein NULL Byte große Typ.

In C++ wird stattdessen gern ein VOID oder ein array[0] verwendet, was aber im Delphi nicht geht, da dort das Kleinste ein array[0..0] ist, welches 1 statt 0 Items enthält.

Beachte: VOID, nicht VOID*, weil das wäre ein "Pointer".

QuickAndDirty 4. Dez 2024 13:42

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

Zitat von Uwe Raabe (Beitrag 1543848)
Das kenne ich schon ziemlich lange z.B. aus VirtualTreeView und es ist auch heute noch so drin:
Delphi-Quellcode:
  TVirtualNode = packed record
...
  private
    Data: record end;       // this is a placeholder, each node gets extra data determined by NodeDataSize
  public

OMG Das ist ein ziemlich cleverer Nutzen, wenn man Komponentenanbieter ist.

Ich nehme an das ganze funtkioniert nicht mit Managed Records oder?


Zitat:

Zitat von freimatz (Beitrag 1543850)
Nun ja... Diese Syntax ist in Standard Pascal schon immer möglich gewesen. Es ist halt ein record und der Inhalt ist leer.
https://www.cs.kent.edu/~durand/CS43...ml#record-type

Ich wusste davon halt lange nichts.
Ich meine mir war klar das es irgendwie alt ist, aber habe das vorher nie gesehen .
Und ich habe in der Schule noch Pascal im Informatik Untericht gelernt!!! Also ich bin alt.


Zitat:

Zitat von himitsu (Beitrag 1543852)
Jupp, das ist ein NULL Byte große Typ.
In C++ wird stattdessen gern ein VOID oder ein array[0] verwendet, was aber im Delphi nicht geht, da dort das Kleinste ein array[0..0] ist, welches 1 statt 0 Items enthält.
Beachte: VOID, nicht VOID*, weil das wäre ein "Pointer".

Interessant. aber sowas als parameter gibt es nicht oder ? So eine are "gib irgend einen Record rein" parameter?

Uwe Raabe 4. Dez 2024 13:49

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

Zitat von QuickAndDirty (Beitrag 1543854)
Und ich habe in der Schule noch Pascal im Informatik Untericht gelernt!!! Also ich bin alt.

Zu meiner Schulzeit gab es noch nicht mal ein Fach Informatik...

himitsu 4. Dez 2024 13:53

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

Ich nehme an das ganze funtkioniert nicht mit Managed Records oder?
warum nicht?

Also dieser "leer record" selbst hat nichts mit Managed zu tun, bzw. auch einen Managed Record kannst du ohne "Fields" deklarieren.

Und was den VST betrifft, wenn/da er auch normale Managed Types (String, DynArray, Variant oder Interface) beherschen sollte, wäre da prinzipiell auch ein Managed Record mit abgedeckt.


Delphi-Quellcode:
prodedure Test(var Irgendwas);

prodedure Test(const Irgendwas);
Aber drin mußt du dann selbst casten, da es innen nur die Referenz gibt, aber leider keine TypeInfo.

Da muß man dann schon auf Generics übergehn, so ala
Delphi-Quellcode:
prodedure Test<T>(Irgendwas: T);
.

himitsu 4. Dez 2024 13:57

AW: "Datentyp" record end wer kennt ihn?
 
Delphi-Quellcode:
var
  Data1: record end;

  Data2: record
    i: Integer;
  end;
Delphi-Quellcode:
type
  TRecordA = record
    i: Integer;
  end;

  TRecordB = record
    x: Integer;
    y: TRecordA;
  end;


  TRecordC = record
    x: Integer;
    y: record;
      i: Integer;
    end;
  end;
Das ist ein Nested-Type, also ein Typ, der inline (nicht explizit) deklariert wird,
aber teilweise fehlen ihm einige TypeInfos, womit generische Zugriffe darauf schwer bis garnicht möglich sind.

QuickAndDirty 4. Dez 2024 14:45

AW: "Datentyp" record end wer kennt ihn?
 
Ich nehme an "Record end;" funktioniert nur in Records?
Weil in FMX haben wir ja sehr nützliche
Delphi-Quellcode:
TagObject:TObject;
TagString:String;
Tag:NativeInt;
Aber sowas wie
Delphi-Quellcode:
TagRecord:Record end;
Ginge vermutlich nicht?
So ein Typ für irgendeinen gemanagden Record.

Edit:
!!!heilige Scheiße!!!
Ich habe jetzt erst verstanden dass "record end;" kein einfacher Typ ist sondern ein leerer inline deklarierter Record...
Sorry , dass ich mich so dumm angestellt habe...danke das ihr am Ball geblieben seid und mir das weiter erklärt habt.

himitsu 4. Dez 2024 15:24

AW: "Datentyp" record end wer kennt ihn?
 
Jupp, im Prinzip ist das
Delphi-Quellcode:
var
  TagRecord: record end;
sowas
Delphi-Quellcode:
type
  VOID = record end;
var
  TagRecord: VOID;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz