Bin gerade dabei eine Klasse zu bauen, mit der zur Laufzeit ein Variable angelegt werden kann, die ein Array beliebiger Dimension (0-3) eines bestimmten Types enthalten kann (Boolean, Double, Integer, AnsiString, ...).
Im Prinzip bin ich bei sowas gelandet:
Delphi-Quellcode:
TDimArray = Array Of Integer;
TVariable<T> = Class
private
fDimensions: TDimArray;
fPData: PByte;
fMemSize: Integer;
public
constructor Create(AName: AnsiString; const ADimensions: TDimArray); virtual;
property Value[Index: TDimArray]: T read GetVal write SetVal;
End;
Was daran natürlich nicht so elegant ist, sind die Zugriffe über Value, bei denen ich mir nicht sicher bin ob sie von der Performance her so günstig sind:
Delphi-Quellcode:
Var
x: TVariable<Integer>;
begin
x := TVariable<Integer>.Create('Test', [2,3,9]);
x.Value[[0,0,2]] := 16
...
Verwaltet werden die Daten in einem großen Speicherblock (fPData) weil keinen Weg gefunden habe eine Mehrdimensionale Variable variabler Dimension zu definieren (geht sowas überhaupt??).
Statt der Value- Property wären auch einzelne entsprechend dimensionierte Properties denkbar:
Delphi-Quellcode:
property Value1D[Index: Integer]: T read GetValue1D write SetValue1D;
property Value2D[x, y: Integer]: T read GetValue2D write SetValue2D;
property Value3D[x, y, z: Integer]: T read GetValue3D write SetValue3D;
Ist möglicherweise schneller aber nicht besonders elegant. Gibts hier eine Möglichkeit einfach die "richtige" property anzulegen zb. über Generics?