tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
597
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Sadi al Wadidrah Sadi al Wadidrah ist offline Mitglied Silber
    Registriert seit
    Jun 2005
    Ort
    Schweiz
    Beiträge
    65
    hallo zusammen

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

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    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
    Geändert von Sadi al Wadidrah (27.06.08 um 13:17 Uhr)
     
    Lächle, morgen wird alles noch schlimmer ...

  2. #2
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    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.
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  3. #3
    Sadi al Wadidrah Sadi al Wadidrah ist offline Mitglied Silber
    Registriert seit
    Jun 2005
    Ort
    Schweiz
    Beiträge
    65
    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?
    Geändert von Sadi al Wadidrah (27.06.08 um 14:41 Uhr)
     
    Lächle, morgen wird alles noch schlimmer ...

  4. #4
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    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.
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  5. #5
    Sadi al Wadidrah Sadi al Wadidrah ist offline Mitglied Silber
    Registriert seit
    Jun 2005
    Ort
    Schweiz
    Beiträge
    65
    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.
    Geändert von Sadi al Wadidrah (27.06.08 um 15:52 Uhr) Grund: experience
     
    Lächle, morgen wird alles noch schlimmer ...

  6. #6
    Sadi al Wadidrah Sadi al Wadidrah ist offline Mitglied Silber
    Registriert seit
    Jun 2005
    Ort
    Schweiz
    Beiträge
    65
    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 :
    1
    2
    3
    4
    5
    6
    7
    
    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! :-[
     
    Lächle, morgen wird alles noch schlimmer ...

Ähnliche Themen

  1. Offener Objektivtest
    Von shenmuefreak im Forum Fotografie & Digitalfotografie
    Antworten: 3
    Letzter Beitrag: 23.12.10, 13:05
  2. [MySQL] 2 Tupel als einen darstellen
    Von Steusi im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 03.11.10, 10:41
  3. Abhängigkeiten zwischen verschiedenen Tupel
    Von MAdwinnix im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 11.07.09, 08:13
  4. Link soll sich bei offener Seite ändern
    Von Sascha_77 im Forum HTML & XHTML
    Antworten: 10
    Letzter Beitrag: 15.04.06, 12:08