Re: Einen Keller in Delphi Programmieren
Im Speicher werden die Elemente aber nach unten gestapelt.
|
Re: Einen Keller in Delphi Programmieren
Du stellst etwas in den Keller. Und nochwas. Du musst das letzte Teil erst wieder aus dem Keller holen bevor Du das erste rausholen kannst. Ist doch egal ob man hoch oder tief stapelt - letztlich isses das gleiche :)
|
Re: Einen Keller in Delphi Programmieren
Die Begriffe sind nur deswegen in ihrer Übersetzung unterschiedlich, weil das Konzept sowohl von Englisch- als auch Deutschsprachigen Leuten unabhängig voneinander entwickelt wurde. Gemeint ist genau das selbe: Stack = Stapel = Keller. Rein historisch bedingt.
|
Re: Einen Keller in Delphi Programmieren
was willst du denn alles in deinem Keller/Stack lagern?
eventuell reicht es schon, wenn du dir mal den Typ Variant anschaust, da kann man recht viel Verschiedenes drin ablegen :angel2: |
Re: Einen Keller in Delphi Programmieren
Zitat:
Du willst folgendes? Keller.push( myData ); myData kann sein, ein Integer? ein TObject? eine TStringlist? Ein TForm? ein Double? ein String? oder sogar ein anderer Record wie ein TRect? das würde sehr einfach zu realisieren sein, wenn es ein Record gäbe..
Delphi-Quellcode:
und dann definierst Du
TDataConverter = packed record
FType : TDataType; FIntegerValue : Integer; FTRectValue : TRect; usw ... // plus ein paar Pointer falls es ein Object oder anderes Object ist private public class operator Implicit(const AValue: String): TDataConverter; class operator Implicit(const AValue: Double): TDataConverter; class operator Implicit(const AValue: TObjecct): TDataConverter; class operator Implicit(const AValue: Integer): TDataConverter; class operator Implicit(const AValue: TRect): TDataConverter; end;
Delphi-Quellcode:
bei der impliziten Typumwandlung (danach lässt sich suchen im Forum) .. müsstest Du Dir dann merken, welchen Typ aData darstellen soll, müsstest dann den Integer speichern oder eben auch den Pointer auf die TStringlist .. je nach Datentyp .. und je nach Datentypen, die Du unterstützen möchtest.
TKeller = class(TObject)
procedure Push(const aData : TDataConverter); end; Aber die paar Grunddatentype und TObject sollte reichen. und wenn die procedure Push aufgerufen wird, dann steht in aData drin, was es für ein Typ ist, den Du speichern musst ... So würde ich das machen, wenn ich in Zukunft nie wieder Arbeit haben will und nicht mehr nachdenken möchte :-) |
Re: Einen Keller in Delphi Programmieren
Es geht dem Threadersteller wohl um das Prinzip aufzuzeigen, wenn ich das richtig verstehe.
In diesem Fall würde ich eigene Datentypen Kreieren und als Stack eine TObjectList nehmen.
Delphi-Quellcode:
type TDataType =(dtObject, dtString, dtInteger, ....); type TBaseType = class property Value: Pointer .... property DataType: TDataType .... end; |
Re: Einen Keller in Delphi Programmieren
Zitat:
statt TDataConverter könnte man auch überladene Funktionen/Prozeduren nutzen, dieses würde dann auch unter älterten Delphi-Versionen (vor TD/D2006) laufen, wo es noch keine Operatoren gab.
Delphi-Quellcode:
TDataType = (dtInteger, dtRect, dtObject, usw.);
TData = record FType : TDataType; FIntegerValue: Integer; FTRectValue: TRect; Object: TObject; usw ... end; TKeller = class(TObject) procedure Push(const aData: Integer); Overload; procedure Push(const aData: TRect); Overload; procedure Push(const aData: TObject); Overload; ... procedure Pop(const aData: Integer); Overload; procedure Pop(const aData: TRect); Overload; procedure Pop(const aData: TObject); Overload; end; |
Re: Einen Keller in Delphi Programmieren
Zitat:
Ich würde es mal so versuchen:
Delphi-Quellcode:
MFG
TDataType = (vString,vInteger,...);
TData = record case DataType: TDataType of vString : (vString : PAnsiString); vInteger : (vInteger: Integer); vSingle : (vSingle : Single); end; |
Re: Einen Keller in Delphi Programmieren
Zitat:
(und wenn man das Ganze auf weniger einheitliche Basistypen runterkürzt, dann wäre de Record auch nicht sooo groß) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 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