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/)
-   -   Wert "nicht gesetzt" bei primitiven Datentypen - wie? (https://www.delphipraxis.net/196228-wert-nicht-gesetzt-bei-primitiven-datentypen-wie.html)

Caps 3. Mai 2018 08:33

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?
 
Vielen Dank für die Vorschläge!
Ich werde mal drüber meditieren...

lg Caps

Whookie 3. Mai 2018 08:54

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?
 
Zitat:

Zitat von Codehunter (Beitrag 1401133)
Je nach Anwendungsfall könnte auch eine Universallösung sinnvoll sein:

Dann könnte man noch einwenig Platz sparen durch einen varianten Record
Delphi-Quellcode:
type
  TNullableValue = Record
    IsNull: Boolean;
    case Integer of
      0: (ValueBool: Boolean;);
      1: (ValueInt: Integer;);
      2: (ValueString: String;);
      { usw. }
  end;

Codehunter 3. Mai 2018 09:00

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?
 
Zitat:

Zitat von Whookie (Beitrag 1401142)
Dann könnte man noch einwenig Platz sparen durch einen varianten Record

Vom Handling her sicher eine interessante Idee. Speicher spart man dadurch aber IMHO nicht, es wird wohl immer der größtmögliche Speicherplatz reserviert. Allerdings nur ein mal und nicht mehrere, also eine minimale Ersparnis hätte man.

himitsu 3. Mai 2018 10:08

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?
 
Zitat:

Zitat von Codehunter (Beitrag 1401133)
Je nach Anwendungsfall könnte auch eine Universallösung sinnvoll sein:
Delphi-Quellcode:
type
  TNullableValue = record
    IsNull: Boolean;
    ValueBool: Boolean;
    ValueInt: Integer;
    ValueString: string;
    { usw. }
  end;

Das nennt sich Variant, bzw. es ist der kleine Bruder davon :angle: (oder Schwester oder Geschlechtsunentschiedener)

@Whookie: Nein, "höhere" Typen dürfen/können nicht in variante Teiles des Records rein.

Delphi-Quellcode:
type
  TNullableValue = Record
    case ValueType: {Integer}TEinEnumMitDenNamenDerTypenUndNullIstAuchEinTyp of
      0: (ValueBool: Boolean);
      1: (ValueInt: Integer);
      2: (ValueString: PChar);
      { usw. }
      666: ({IsNull: Boolean = True});
  end;

Codehunter 3. Mai 2018 11:59

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?
 
Zitat:

Zitat von himitsu (Beitrag 1401171)
@Whookie: Nein, "höhere" Typen dürfen/können nicht in variante Teiles des Records rein.

Stimmt, da war was. Ich hatte schon die ganze Zeit so ein Gefühl, nur mangels Delphi grad nicht ausprobiert sondern blind geschrieben.

Stevie 3. Mai 2018 15:10

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?
 
Zitat:

Zitat von himitsu (Beitrag 1401171)
Nein, "höhere"gemanagte Typen dürfen/können nicht in variante Teiles des Records rein.

Fixed

himitsu 3. Mai 2018 15:57

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?
 
Zitat:

Zitat von Stevie (Beitrag 1401215)
Fixed

Hmmmm, TObject im ARC. :gruebel:

Stevie 3. Mai 2018 17:53

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?
 
Zitat:

Zitat von himitsu (Beitrag 1401225)
Zitat:

Zitat von Stevie (Beitrag 1401215)
Fixed

Hmmmm, TObject im ARC. :gruebel:

= managed type

Delphi-Quellcode:
type
  TWhoops = record
    case Boolean of
      True: (X: TObject);
      False: (Y: Pointer);
  end;
Für Linux kompiliert: E2154 Type 'TObject' needs finalization - not allowed in variant record

Ein Code für alle Plattformen am A... :mrgreen: (musste nen [unsafe] ran schreiben, dann kompilierts zumindest)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 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