Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Offener Parameter-Array mit unterschiedlichen Typen (https://www.delphipraxis.net/159462-offener-parameter-array-mit-unterschiedlichen-typen.html)

mindtrap 29. Mär 2011 12:13

Delphi-Version: 2010

Offener Parameter-Array mit unterschiedlichen Typen
 
Hallo,

folgendes Problem:
Ich möchte Entwicklern die meine Funktionen verwenden die Möglichkeit bieten
innerhalb eines offenen Parameter-Arrays alle Typen zu übergeben.

Beispiel
Delphi-Quellcode:
function MyFunc(AParams: const array of Variant): Boolean;
begin
  // ..
end;
Ein Aufruf könnte so geartet sein:
Delphi-Quellcode:
if MyFunc(['Hallo Welt', 123]) then
begin
  // ..
end;
Funktioniert wunderbar.

Allerdings soll es den Entwicklern auch möglich sein Objekte (by Ref) zu übergeben.
Bisher ist dies nur möglich indem das Objekt so übergeben wird:
Delphi-Quellcode:
MyFunc([Integer(MyObject]); // Zeiger als Integer behandeln
Allerdings ist das recht unschön.

Ziel des ganzen Spaßes ist es anonyme Werte an die Funktion bequem und schön zu übergeben.
Wenn jemand einen geschickteren Weg kennt, ich bin für Vorschläge offen.

Was ich allerdings nicht möchte ist, dass der Programmierer gezwungen ist
ein Parameterobjekt zu erzeugen und das dann an die Funktion weitergibt.

Danke

Crosslink im DF

Neutral General 29. Mär 2011 12:44

AW: Offener Parameter-Array mit unterschiedlichen Typen
 
Hallo,

Versuchs mal so:

Delphi-Quellcode:
function MyFunc(AParams: Array of const): Boolean;
begin
  // ..
end;

// Aufruf:
if MyFunc([MyObject,123,'Test123',false]) then
  // ...

mindtrap 29. Mär 2011 14:07

AW: Offener Parameter-Array mit unterschiedlichen Typen
 
Ich hatte das damals schon mit einem array of const versucht.
Hatte nur die verschiedenen Daten-Typen nicht korrekt auswerten können.
Nun habe ich es erneut versucht und auch den Fehler gefunden:

Delphi-Quellcode:
... AParams: array of const ...

  for LIdx := Low(AParams) to High(AParams) do
  begin
    case AParams[LIdx].VType of
      vtInteger: //;
      vtString,
      vtWideString,
      vtUnicodeString: //;
      vtObject: ShowMessage('Object');
    end;
  end;
Ich hatte mich damals auf die Hilfe verlassen nur der Typ vtUnicodeString ist
in Delphi 2010 in der Hilfe nicht beschrieben.

Danke für den Tipp, jetzt klappt auch alles, was ich vor habe. :)


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