AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi-Equivalent zur C-union

Ein Thema von oXmoX · begonnen am 21. Jun 2005 · letzter Beitrag vom 22. Jun 2005
Antwort Antwort
Seite 2 von 2     12   
Robert Marquardt
(Gast)

n/a Beiträge
 
#11

Re: Delphi-Equivalent zur C-union

  Alt 22. Jun 2005, 11:26
Es ist uebrigens kein Trick noetig um hinter den varianten Teil eines Records weitere Elemente zu platzieren.
Man deklariert den varianten Teil einfach als Element eines normalen Records, also Record in Record.

Delphi-Quellcode:
  TEinfachesRecord = record
    VariantesElement: record
      case Integer of
      ...
    end;
    WeiteresEinfachesElement: Integer;
  end;
  Mit Zitat antworten Zitat
BaumWollSchaf

Registriert seit: 20. Jan 2005
7 Beiträge
 
Delphi 2005 Professional
 
#12

Re: Delphi-Equivalent zur C-union

  Alt 22. Jun 2005, 11:31
@NicoDE

Dein Beitrag ist so ausführlich, den könntest du fast 1 zu 1 bei den Tutorials posten.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#13

Re: Delphi-Equivalent zur C-union

  Alt 22. Jun 2005, 11:35
Damit würde man aus einer unbenannten Union eine benannte Union machen (aus .Foo würde .VariantesElement.Foo werden). Das stört in den meisten Fällen nicht weiter, aber ist manchmal nicht erwünscht (Dokumentation, andere Sprachen mit gleichem Quelltext, etc.).
  Mit Zitat antworten Zitat
Zerolith

Registriert seit: 12. Mär 2003
Ort: Kempten
188 Beiträge
 
Delphi 6 Enterprise
 
#14

Re: Delphi-Equivalent zur C-union

  Alt 22. Jun 2005, 12:47
Wow - Danke @ Nico

Also heißt: Wenn ich eine Liste habe. Die z.B. aus lauter Records mit dieser "Union-Strukutr" besteht kann ich folgendes machen:

Delphi-Quellcode:
Liste[0].Index := 1; // Integer
Liste[0].Value := 'String';

Liste[1].Index := 2;
Liste[1].Value := 325;

Liste[2].Index := 3;
Liste[2].Value := TRUE;

Liste[3].Index := 4;
Liste[3].Value := '2005-05-15 15:00:42';
Daniel
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#15

Re: Delphi-Equivalent zur C-union

  Alt 22. Jun 2005, 13:06
Zitat von Zerolith:
Also heißt: Wenn ich eine Liste habe. Die z.B. aus lauter Records mit dieser "Union-Strukutr" besteht kann ich folgendes machen:
Delphi-Quellcode:
Liste[0].Index := 1; // Integer
Liste[0].Value := 'String';
Liste[1].Index := 2;
Liste[1].Value := 325;
Liste[2].Index := 3;
Liste[2].Value := TRUE;
Liste[3].Index := 4;
Liste[3].Value := '2005-05-15 15:00:42';
Die Frage ist, als was .Value deklariert ist. Da Delphi typsicher ist, dürfte die Zuweisung nicht funktionieren.

Eine Lösung könnte so aussehen (obwohl ich die Problemstellung eher mit Klassen oder Variants lösen würde):
Delphi-Quellcode:
type
  TListEntryType = (letAString, letInteger, letBoolean);
  TListEntry = record
    Idx: Integer;
    Typ: TListEntryType;
    Val: record
      case TListEntryType of
        letAString: (AsAString: AnsiString);
        letInteger: (AsInteger: Integer);
        letBoolean: (AsBoolean: Boolean);
    end;
  end;

//...

with Liste[0] do
begin
  Idx := 1;
  Typ := letAString;
  Val.AsAString := 'String';
end;
with Liste[1] do
begin
  Idx := 2;
  Typ := letInteger;
  Val.AsInteger := 325;
end;
with Liste[2] do
begin
  Idx := 3;
  Typ := letBoolean;
  Val.AsBoolean := True;
end;
with Liste[3] do
begin
  Idx := 4;
  Typ := letInteger; // falsch, aber möglich - Beispiel um Fehlerquellen aufzuzeigen :)
  Val.AsAString := '2005-05-15 15:00:42';
end;
  Mit Zitat antworten Zitat
Zerolith

Registriert seit: 12. Mär 2003
Ort: Kempten
188 Beiträge
 
Delphi 6 Enterprise
 
#16

Re: Delphi-Equivalent zur C-union

  Alt 22. Jun 2005, 13:09
Ich habe die Problemstellung mit Klassen und Variants gelößt - allerdings finde ich deine Lösung vom letzten post irgendwie simpler.

Oder hat die Sache einen Haken?
Daniel
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#17

Re: Delphi-Equivalent zur C-union

  Alt 22. Jun 2005, 13:14
Zitat von Zerolith:
Oder hat die Sache einen Haken?
Klassen sind sicher besser als Records.
Ich habe in den Code (vorheriger Beitrag) einen logischen Fehler eingebaut, um das Problem zu verdeutlichen
  Mit Zitat antworten Zitat
Zerolith

Registriert seit: 12. Mär 2003
Ort: Kempten
188 Beiträge
 
Delphi 6 Enterprise
 
#18

Re: Delphi-Equivalent zur C-union

  Alt 22. Jun 2005, 13:15
Verstehe...

Nochmals Danke!
Daniel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz