Offener Dateityp à la n-Tupel

hallo zusammen

ich möchte gerne einen Prozedurtyp deklarieren, der jede Art von Parameter annimmt.

Code:
type
  TCustomProc: Procedure("n-tupel an parameter");

var
  myProc: TCustomProc;

procedure DoSomething(x,y,z: Integer);
begin
  // mach was...
end;

procedure Main();
begin
  myProc := DoSomething;
end;

gibt es einen Dateityp, der auf eine Art offen ist, eine Art Gruppe? Könnte man das mit Varianten lösen?
ich habe schon an "array of variant" gedacht, aber dann muss ich das ganze jedes mal decodieren und die Parameterübergabe wäre auch recht umständlich.


grz Sadi
 
Zuletzt bearbeitet:
Hi,

evtl. sowas wie TList oder ein Array vom Typ TObject. Aber dabei wirst du um das casten der Objekte wohl nicht herum kommen.

Kommen denn prinzipiell alle Datentypen in Frage oder nur bestimmte? Evtl. bringt dir eine polymorphe Vererbung von Interfaces auch was?

Grüße, D.
 
ich könnte mir auch vorstellen, dass nur ein einziger Dateityp benötigt wird, zB. String.

mein Hauptproblem ist die Anzahl der Parameter. Könnte man ev. den Typ procedure schon als potenziell überladen festlegen oder explizit jede Definition einer Prozedur? ändert "overload" etwas am Dateityp, oder wird im Compiler bloss eine entscheidende Überfunktion geschaffen? so quasi: if 2 parameter, nehme fkt1, if 3 parameter, nehme fkt2.

Oder gibt es Gruppenbezeichner um Variablen für den Compiler zusammenzufassen?

kannst du mir das mit der polymorphen Vererbung von Interfaces genauer erklären?
 
Zuletzt bearbeitet:
Hi,

wenn es dir nur um die Anzahl geht, würde ich dir zu einem TList-Objekt raten (evtl. auch TStringList, wenns nur Strings sein sollen).

Mit den Interfaces dachte ich, dass du dir ein Interface erstellst, in dem du deine Datentypen als Feld kapselst. Und ja nachdem, welche Implementation du benutzt, kannst du ein Objekt vom Typ des Interfaces in ein Array legen. Sieh dir dazu am besten mal die Polymorphie als Bestandteil der objektorientierten Programmierung an.

Grüße, D.
 
das würde theoretisch gehen, nur müsste ich dann jedes Mal vor dem Aufruf einer gespeicherten Prozedur die Parameter auf die Übergabe "vorbereiten".

Funktionstyp ohne Parameter definieren und nachher überladen? hm...

edit: nein, ein Funktionstyp lässt sich nicht als potenziell überladen definieren. Entweder ist er es, oder nicht.
 
Zuletzt bearbeitet:
So, gelöst: ich habe mich auf eine Skriptsprache berufen, die ich mal in Eiffel programmiert habe.

ich kapsle die Funktion in einem neuen Typ.

Code:
type
  TCommand = class
    name: String;
    command: procedure of object;
    parameters: TList;
    procedure execute(some_parameters: TList);
  end;

dann wird diese blöde Liste halt wieder analysiert! :-[
 
Zurück