AGB  ·  Datenschutz  ·  Impressum  







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

unbestimmter Datentyp deklarieren

Ein Thema von vsilverlord · begonnen am 16. Feb 2010 · letzter Beitrag vom 17. Feb 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von vsilverlord
vsilverlord

Registriert seit: 7. Jan 2008
Ort: Baden Württemberg- Hohenlohekreis
174 Beiträge
 
RAD-Studio 2009 Arc
 
#1

unbestimmter Datentyp deklarieren

  Alt 16. Feb 2010, 12:48
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:
tbuffer = class
private
items: array of tunbestimmterdatentyp; //ttrait als unbestimmter Datentyp
...
public
...
procedure setbestimmterdatentyp(bestimmterdatentyp: ???)
so ungefähr soll das aussehen.
Volker
~beware
Wizards First Rule:
People are stupid; given proper motivation, almost anyone will believe almost anything. Because people are stupid, they will believe a lie because they want to believe it’s true, or because they are afraid it might be true
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#2

Re: unbestimmter Datentyp deklarieren

  Alt 16. Feb 2010, 12:53
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: unbestimmter Datentyp deklarieren

  Alt 16. Feb 2010, 12:56
Evtl. mit dem Typ Variant ?

Und in neuen Delphi-Versionen auch Generics ...
  Mit Zitat antworten Zitat
Benutzerbild von Jaynder
Jaynder

Registriert seit: 2. Dez 2004
Ort: Süderelbe
134 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: unbestimmter Datentyp deklarieren

  Alt 16. Feb 2010, 13:01
Variant ist gut, aber ungemütlich zu handlen. Generics helfen hier gar nicht. himitsu's Lösung passt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#5

Re: unbestimmter Datentyp deklarieren

  Alt 16. Feb 2010, 13:07
@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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#6

Re: unbestimmter Datentyp deklarieren

  Alt 16. Feb 2010, 14:25
Wie wärs mit nem unbestimmten Pointer?
Delphi-Quellcode:
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;
Und Dispose nicht vergessen, sonst schaffst du 'nen Speicherleck.
  Mit Zitat antworten Zitat
Benutzerbild von Jaynder
Jaynder

Registriert seit: 2. Dez 2004
Ort: Süderelbe
134 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: unbestimmter Datentyp deklarieren

  Alt 16. Feb 2010, 14:29
Und wer soll das später noch mal verstehen?
himitsu's record mit varianten sind die sauberste Lösung.
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#8

Re: unbestimmter Datentyp deklarieren

  Alt 16. Feb 2010, 14:33
Natürlich könnte man auch von allen Datentypen Container-Klassen basteln, und dann einen Array of TObject draus machen...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#9

Re: unbestimmter Datentyp deklarieren

  Alt 16. Feb 2010, 14:39
Ab Delphi 2010 könnte man es auch mit array of TValue versuchen.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von vsilverlord
vsilverlord

Registriert seit: 7. Jan 2008
Ort: Baden Württemberg- Hohenlohekreis
174 Beiträge
 
RAD-Studio 2009 Arc
 
#10

Re: unbestimmter Datentyp deklarieren

  Alt 16. Feb 2010, 16:14
hm.
hier mal der Quelltext wie es bisher aussieht, so gefällt es mir halt überhaupt nicht:

Delphi-Quellcode:
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.
Ich denke ihr wisst am besten wir man das hier verbessern kann, wenigstens funktioniert es so, auch wenn es hässlich ist.
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
Volker
~beware
Wizards First Rule:
People are stupid; given proper motivation, almost anyone will believe almost anything. Because people are stupid, they will believe a lie because they want to believe it’s true, or because they are afraid it might be true
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:17 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