AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Lineare Parameterüberladung (wie bei PHP echo() ) in Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Lineare Parameterüberladung (wie bei PHP echo() ) in Delphi

Ein Thema von ThE_-_BliZZarD · begonnen am 17. Mai 2010 · letzter Beitrag vom 17. Mai 2010
Antwort Antwort
ThE_-_BliZZarD

Registriert seit: 15. Sep 2006
Ort: Wiesbaden/Hessen
89 Beiträge
 
Delphi 2010 Professional
 
#1

Lineare Parameterüberladung (wie bei PHP echo() ) in Delphi

  Alt 17. Mai 2010, 18:17
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
MSVC2008 (C/C++ with QT), Delphi RAD 2010, Flash CS5 (FDT/Adobe), Java EE (Eclipse), PHP5
Antwortsprachen: Deutsch, Englisch, Französisch, Japanisch
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 17. Mai 2010, 18:25
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#3

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

  Alt 17. Mai 2010, 18:35
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 17. Mai 2010, 18:40
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.
$2B or not $2B
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#5

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

  Alt 17. Mai 2010, 18:53
Indirekt kann man solche Schweinereien machen, indem du eine Scriptsprache einbindest
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
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#6

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

  Alt 17. Mai 2010, 19:16
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
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#7

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

  Alt 17. Mai 2010, 19:27
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
  Mit Zitat antworten Zitat
ThE_-_BliZZarD

Registriert seit: 15. Sep 2006
Ort: Wiesbaden/Hessen
89 Beiträge
 
Delphi 2010 Professional
 
#8

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

  Alt 17. Mai 2010, 21:53
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
MSVC2008 (C/C++ with QT), Delphi RAD 2010, Flash CS5 (FDT/Adobe), Java EE (Eclipse), PHP5
Antwortsprachen: Deutsch, Englisch, Französisch, Japanisch
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:39 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