Dowolna tablica w parametrze funkcji

0

Cześć, mam Delphi 6.
Chcę w parametrze funkcji przekazać DOWOLNĄ jednowymiarową tablicę i tam wykonać na niej pewne operacje(które da się wykonać tak samo na każdej jednowymiarowej tablicy).

Ale nie mam pojęcia jak to zrobić bez użycia Variantów. Szukałem w helpie, trochę przeskoczyłem net, ale nic nie znalazłem.

Mój pomysł:

procedure Blabla(var Arr: array);

oczywiście nie działa :)
Da się to zrobić bez używania Variantów?

0

możliwość to array of variant lub możesz zrobić kilka przeciążonych funkcji wtedy kompilatro zrobi tak by program decydowal ktora z przeciazonych funkcji ma uzyc.

czyli robisz kilka funkcji/procedur

procedure Blabla(var Arr: array of integer); overload;
procedure Blabla(var Arr: array of float); overload;
procedure Blabla(var Arr: array of string); overload;

itp

0

ciąg bitów i dodatkowy parametr gdzie będzie określone co jest w tym ciągu ( tekst, liczba itp ) i wtedy można bez przeciążeń ale tak ładnie już nie jest =]

0

możesz użyć

procedure Blabla(var Arr);

, jednak i tak potrzebujesz rozmiar pojedynczego elementu - bez tego nie będzie wiadomo ile bajtów później zaczyna się kolejna pozycja tablicy.
to samo tyczy się długości tablicy.

0
var
  Tab: array of Integer;

function Test(var Arr: Pointer): Integer;
var
  Size: Integer;
begin
 {1} Size := Integer(Arr^); // pierwszy element - rozmiar
 {2} Inc(Integer(Arr), Size); // przesuniecie o podany rozmiar
 {3} Result := Integer(Arr^); // dugi element - czyli '1'
  // itd powtarzajac {2} i {3} w zaleznosci ktory element potrzeba
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetLength(Tab, 3);
  Tab[0] := SizeOf(Integer);
  Tab[1] := 1;
  Tab[2] := 2;
  Tab[3] := 3;
  Button1.Caption := IntToStr(Test(Pointer(Tab)));
end;

W tym w pierwszym elemencie masz rozmiar potrzebny do przesunięcia.. ale nie ma szans na stwierdzenie jaki array funkcja dostała.
Jak zwykle sposobów wiele a mało napisałeś - np jak możesz wpływać na tablice i jakie operacje potrzebujesz na niej wykonać ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1