![]() |
unbestimmter Datentyp deklarieren
Hallo, ich möchte eine Klasse deklarieren, die einen array von unbestimmten Datentypen hat. Später dann möchte ich dann z.b. Integer oder tvector zuweisen können.(Natürlich bevor dem array Werte zugewiesen wurden). Wie kann ich das machen?
Delphi-Quellcode:
so ungefähr soll das aussehen.
tbuffer = class
private items: array of tunbestimmterdatentyp; //ttrait als unbestimmter Datentyp ... public ... procedure setbestimmterdatentyp(bestimmterdatentyp: ???) |
Re: unbestimmter Datentyp deklarieren
Wenn es unbeding ein Array sein soll, dann garnicht.
Du kannst nur einen Typen nehmen, wo die beiden anderen Wunschtypen reinpassen. z.B.:
Delphi-Quellcode:
tunbestimmterdatentyp = record
case integer of 0: (i: Integer); 1: (v: tvector); end; |
Re: unbestimmter Datentyp deklarieren
Evtl. mit dem Typ Variant ?
Und in neuen Delphi-Versionen auch Generics ... |
Re: unbestimmter Datentyp deklarieren
Variant ist gut, aber ungemütlich zu handlen. Generics helfen hier gar nicht. himitsu's Lösung passt.
|
Re: unbestimmter Datentyp deklarieren
@jfheins: Generics helfen, wenn man den Typ erst zur Kompilierungszeit festlegen möchte, aber hier soll es erst zur Laufzeit passieren.
Variants und Records vertragen sich nicht sonderlich. |
Re: unbestimmter Datentyp deklarieren
Wie wärs mit nem unbestimmten Pointer?
Delphi-Quellcode:
Und Dispose nicht vergessen, sonst schaffst du 'nen Speicherleck. :angel2:
type
TAnyArray = array of Pointer; PInteger = ^Integer; PVector = ^TVector; var AnyArray: TAnyArray; ... New(PInteger(AnyArray[i])); PInteger(AnyArray[i])^ := 89; New(PVector(AnyArray[i])); PVector(AnyArray[i])^.IrgendeinFeld := 34; |
Re: unbestimmter Datentyp deklarieren
:gruebel: Und wer soll das später noch mal verstehen?
himitsu's record mit varianten sind die sauberste Lösung. :thumb: |
Re: unbestimmter Datentyp deklarieren
Natürlich könnte man auch von allen Datentypen Container-Klassen basteln, und dann einen Array of TObject draus machen... :twisted:
|
Re: unbestimmter Datentyp deklarieren
Ab Delphi 2010 könnte man es auch mit
Delphi-Quellcode:
versuchen.
array of TValue
|
Re: unbestimmter Datentyp deklarieren
hm.
hier mal der Quelltext wie es bisher aussieht, so gefällt es mir halt überhaupt nicht:
Delphi-Quellcode:
Ich denke ihr wisst am besten wir man das hier verbessern kann, wenigstens funktioniert es so, auch wenn es hässlich ist.
unit uBuffer;
interface uses uvektor; Type // Pointer auf array mit extended tarrayextended = record items:array of extended; end; parrayextended=^tarrayextended; // Pointer auf array mit tvektor3 tarraytvektor3 = record items:array of tvektor3; end; parraytvektor3=^tarraytvektor3; ... ////////// TBuffer /////////////// TBuffer = class public constructor create;virtual; destructor destroy;virtual; procedure SetSlotlength(Slotlength:integer);virtual;abstract; end; pBuffer=^TBuffer; /////////TBufferextended////////// TBufferextended = class(TBuffer) protected fparts:tarrayextended; //getter setter methoden function getparts:parrayextended; procedure setparts(nitems:parrayextended); public // create / destroy constructor create;virtual; destructor destroy;virtual; //propertys property parts:parrayextended read getparts write setparts; procedure SetSlotlength(Slotlength:integer);override; end; pBufferextended=^TBufferextended; //////////TBuffertvektor3///////// TBuffertvektor3 = class(TBuffer) protected fparts:tarraytvektor3; //getter setter methoden function getparts:parraytvektor3; procedure setparts(nitems:parraytvektor3); public // create / destroy constructor create;virtual; destructor destroy;virtual; //propertys property parts:parraytvektor3 read getparts write setparts; procedure SetSlotlength(Slotlength:integer);override; end; implementation ... end. Das Ziel hier ist, dass ich TBuffer benutzen kann, ohne gleich den Typ angeben zu müssen. Den kann ich nun später angeben. //edit: gekürzt, um Übersichtlichkeit zu schaffen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:48 Uhr. |
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