Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Gemeinsamer Array-typ? (https://www.delphipraxis.net/44219-gemeinsamer-array-typ.html)

malo 15. Apr 2005 16:25


Gemeinsamer Array-typ?
 
Hi!

Ich suche eine Möglichkeit, einen beliebigen Array-Typ als Parameter einer Funktion zu erwarten. Diese soll das Array ab einem bestimmten Index "um eins aufrücken". Ich will das jedoch ziemlich allgemein halten, und möglichst ohne Überladungen. Die sind zuviel Tipparbeit :?

Waldteufel 15. Apr 2005 16:26

Re: Gemeinsamer Array-typ?
 
Hi.

Delphi-Quellcode:
function aufruecken(x : variant, wieviel : integer = 1) : variant;
var
  i : integer;
  y : variant;
begin
  y := VarArrayCreate([0, length(x) + wieviel], VarType(x));
  for i := length(x) + wieviel downto 1 do
    y[i] := x[i - wieviel];
end;
So müsste es gehen...

Dani 15. Apr 2005 16:29

Re: Gemeinsamer Array-typ?
 
Hi!

Bei Google suchenarray of const
http://community.borland.com/article...,15582,00.html

malo 15. Apr 2005 16:30

Re: Gemeinsamer Array-typ?
 
Zitat:

Zitat von Waldteufel
Hi.

Delphi-Quellcode:
function aufruecken(x : variant, wieviel : integer = 1) : variant;
var
  i : integer;
  y : variant;
begin
  y := VarArrayCreate([0, length(x) + wieviel], VarType(x));
  for i := length(x) + wieviel downto 1 do
    y[i] := x[i - wieviel];
end;
So müsste es gehen...

Danke... aber es sollte eigentlich eine array-variable übergeben und bearbeitet werden. Es sollte keins neu erstellt werden, das bringt mir reichlich wenig :?

malo 15. Apr 2005 16:35

Re: Gemeinsamer Array-typ?
 
Bei folgendem Code kommt aber die fehlermeldung "inkompatible Typen":

Delphi-Quellcode:
procedure test(a: array of const);
begin
  showMessage('test');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  a: array[0..1] of string;
begin
  a[0] := 'test';
  test(a);
end;

shmia 15. Apr 2005 17:19

Re: Gemeinsamer Array-typ?
 
Zitat:

Zitat von malo
Ich suche eine Möglichkeit, einen beliebigen Array-Typ als Parameter einer Funktion zu erwarten. Diese soll das Array ab einem bestimmten Index "um eins aufrücken". Ich will das jedoch ziemlich allgemein halten, und möglichst ohne Überladungen. Die sind zuviel Tipparbeit :?

Es gibt min. 4 Arten, wie man Arrays als Parameter übergeben kann:
1.) "normale" Array-Parameter für statische Arrays
2.) offene Array-Parameter für dynamische Arrays
3.) variante offene Array-Parameter
4.) Arrays im Datentyp Variant abgebildet
Die 4 Arten sind nicht miteinander kompatibel!
Die Idee "eine Procedure für Alles" kannst du also gleich begraben.

Offene Array-Parameter sind an einen Datentyp gebunden. Du musst also für jeden Datentyp eine eigene
Prozedure schreiben.

Variante offene Array-Parameter haben einen grossen Overhead; bei sehr grossen Arrays sollte die nicht verwenden.
Dies gilt ebenso für Nummer 4.).

Es gäbe da noch die Funktion Slice, die Teile von dynamischen Arrays liefert.
Aber da ist wohl viel Compiler-Magic dabei; ich habe den Sourcecode dazu nicht gefunden.

malo 15. Apr 2005 18:13

Re: Gemeinsamer Array-typ?
 
Zitat:

Zitat von shmia
Die Idee "eine Procedure für Alles" kannst du also gleich begraben.

Schade... also, grundsätzlich brauche ich auch nur einen Array-Typ für meine Zwecke. Ich wollte die Prozedur nur verallgemeinern, damit ich die nich umschreiben muss, falls ich einen anderen Array-Typ brauche. Wenn das nicht geht, ist das halt pech. ;)

jim_raynor 15. Apr 2005 18:56

Re: Gemeinsamer Array-typ?
 
Also zum Löschen hab ich eine ultimative Funktion geschrieben. Such mal nach DeleteArray in der Codelib. Eventuell kannst du es an deine Bedürfnisse anpassen, allerdings wird dort auch bissle Assembler verwendet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz