Einzelnen Beitrag anzeigen

Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#1

Kann man "X: array of array of const" realisieren?

  Alt 16. Dez 2006, 16:00
Hallo zusammen.

Ich habe verschiedene Klassen die Objektlisten verwalten. Dabei haben einige Listen Unterlisten. Alle Listen haben gemeinsam, dass Starteinträge zur Programmierzeit bereits feststehen. Ich möchte daher dem Kontruktor diese Starteinträge mit auf den Weg geben. Für die Listen ohne Unterlisten sieht der Kontruktur beispielhaft so aus:
Delphi-Quellcode:
TMyObjectList1 = class(TObjectList)
  ...
  constructor Create(const Items: array of const);
  ...
end;

constructor TMyObjectList1.Create(const Items: array of const);
var
  Index: Integer;
begin
  inherited Create;

  for Index := 0 to High(Items) do
    if Items[Index].VType = vtObject
      then Add(Items[Index].VObject)
      else Exception.Create('Typ des Elements im Array-Parameter kann nicht verarbeitet werden.');
end;
Ich hätte auch gern den Listen mit Unterlisten die Starteinträge dem Konstruktor übergeben; etwa so:
Delphi-Quellcode:
TMyObjectList2 = class(TObjectList)
  ...
  constructor Create(const Items: array of const);
  ...
end;

constructor TMyObjectList2.Create(const Items: array of const);
var
  Index: Integer;
begin
  inherited Create;

  for Index := 0 to High(Items) do
    if Items[Index].VType = {?}...{/?}
      then Add(TMyObjectList1.Create({?}Items[Index]{/?}))
      else Exception.Create('Typ des Elements im Array-Parameter kann nicht verarbeitet werden.');
end;
Das würde es gestatten eine Liste auf höherer Ebene wie folgt zu erzeugen:
Delphi-Quellcode:
MyObjectList:=TMyObjectList.Create([
  [
    [TObject1.Create(...),TObject2.Create(...),TObject3.Create(...)],
    [TObject1.Create(...),TObject4.Create(...),TObject4.Create(...),TObject5.Create(...)]
  ],
  [
    [TObject1.Create(...),TObject6.Create(...)],
    [TObject7.Create(...),TObject7.Create(...)],
    // ...
  ],
  // ...
]);
Momentan ist das Erzeugen und Befüllen der Listen ein Wust aus Variablen, Kontruktoren und Add-Funktionen.

Aber wenn ich versuche ein Array, wie oben gezeigt, als Parameter zu übergeben, teilt mir der Compiler beim ersten Unterelement-Array mit: "Ordinaltyp erforderlich." Gibt es eine Möglichkeit die Unterelement-Arrays sicher als Ordinaltyp zu kaschieren?

Gruß,
Panthrax.
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat