Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Lineare Parameterüberladung (wie bei PHP echo() ) in Delphi (https://www.delphipraxis.net/151429-lineare-parameterueberladung-wie-bei-php-echo-delphi.html)

ThE_-_BliZZarD 17. Mai 2010 17:17


Lineare Parameterüberladung (wie bei PHP echo() ) in Delphi
 
Hallo liebe DelphiPraxis-Gemeinde,

Ich habe gerade eine Funktion geschrieben, mit welcher man ein Array erstellen kann, damit aber verständlich wird was ich meine bzw bezwecken will folgt etwas Code:

Delphi-Quellcode:
type

TMyRecord = record
   sinnlos: Boolean;
end;

TMyRecordArray = Array of TMyRecord;

function AMyRecordArray(record1: TMyRecord): TMyRecordArray; overload; inline;
function AMyRecordArray(record1, record2: TMyRecord): TMyRecordArray; overload; inline;
function AMyRecordArray(record1, record2, record3: TMyRecord): TMyRecordArray; overload; inline;
Ganz klar: Man kann das jetzt beliebig oft wiederholen - z.B. 255 mal oder MAX_INTEGER mal oder etc.


In anderen (Skript-)Sprachen gibt es Sprackonstrukte um ALLGEMEINE Paramterlisten zu bekommen; um mal ein populäres Beispiel zu bringen: PHP und seine Echo()-Funktion, weiterhin gibts es die Möglichkeit vollkommen allgemeine Funktionen zu machen: PHP.net: function_get_args(). Ich vermute mal die Antwort ist ein einfaches "NEIN - Delphi ist ja auch eine _richtige_ Programmiersprache!" aber trotzdem:

Gibt es die Möglichkeit eine Funktion linear (d.h. für den selben Parametertypen) zu überladen?

Viele Grüße aus dem momentan äußerst verregneten Taunus,

Philipp

SirThornberry 17. Mai 2010 17:25

Re: Lineare Parameterüberladung (wie bei PHP echo() ) in Del
 
Das sollte auch in Delphi funktionieren. Ich meine das auch schon bei mitgelieferten Funktionen von Delphi gesehen zu haben. Den Begriff "lineare Parameterüberladung" habe ich aber noch nie gehört.

Tryer 17. Mai 2010 17:35

Re: Lineare Parameterüberladung (wie bei PHP echo() ) in Del
 
Eine Alternative wären offene Array-Parameter:
Delphi-Quellcode:
procedure Foo(const b: array of Boolean);
var
  i: Integer;
begin
  for i := Low(b) to High(b) do
    ...
end;

var
  a, b, c, d: Boolean;
begin
  Foo([True, b, c, d]);
  Foo(a);
end;
Grüsse, Dirk

himitsu 17. Mai 2010 17:40

Re: Lineare Parameterüberladung (wie bei PHP echo() ) in Del
 
In Delphi kann man sowas leider nicht programmieren.

Einige der alten Pascalfunktionen (ala WriteLn) können sowas, aber dort ist quasi viel "CompilerMagic" im Spiel.

Mit Array-Parametern kann man Vieles hinbekommen,
aber dann muß man mit dem Zusätzlichen [ ] leben.

Delphi-Quellcode:
Array of Const
Array of Variant
und eventuell noch
Array of TMyRecord;
Bemerke: Dieses muß durekt als Parameter (siehe Tryer) und nicht als eigenständiger Typ deklariert werden.

blackfin 17. Mai 2010 17:53

Re: Lineare Parameterüberladung (wie bei PHP echo() ) in Del
 
Indirekt kann man solche Schweinereien machen, indem du eine Scriptsprache einbindest :mrgreen:
Mit Lua z.B. habe ich so etwas schonmal gemacht, da kannst du dann die variablen Parameter auf den Stack pushen und wieder runterpoppen.

Das macht aber eigentlich nur dann Sinn, wenn man die Scriptsprache auch wirklich braucht, ansonsten ist es Irrsinn :mrgreen:

Phoenix 17. Mai 2010 18:16

Re: Lineare Parameterüberladung (wie bei PHP echo() ) in Del
 
Zitat:

Zitat von Tryer
Eine Alternative wären offene Array-Parameter:

So macht es auch z.B. die Format - Funktion.
Siehe auch hier: http://www.chami.com/tips/delphi/112696D.html

Tryer 17. Mai 2010 18:27

Re: Lineare Parameterüberladung (wie bei PHP echo() ) in Del
 
Zitat:

linear (d.h. für den selben Parametertypen)
..
Das macht den Overhead eines array of const (= array of TVarRec) wie in der Format-Funktion überflüssig.
Unter dem Eintrag "offene Array-Parameter" gibt es alle Aufrufvarianten (eben auch Variant-lose ;)) in der Delphi-Hilfe.

Grüsse, Dirk

ThE_-_BliZZarD 17. Mai 2010 20:53

Re: Lineare Parameterüberladung (wie bei PHP echo() ) in Del
 
Vielen Dank an alle Delphi-Kenner für eure Antworten :)

Ich werde wohl den offenen Array-Typ benutzen - das erledigt eigl. genau das was ich brauche :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 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