Tablica dowolnego typu jako parametr procedury

0

Chce do parametru procedury przekazać DYNAMICZNA tablice DOWOLNEGo typu, w helpie wyczytalem o array of const, ale coś robie nie tak, bo pokazuje pusta tablice:

 
var 
   tab1 : array of integer; 

procedure testy(A : array of const);
begin
	 showmessage( 'Liczba Elem Tablicy - 1 = ' + inttostr(high(A)) );

	{
	  dalsze działania w zależnosci od wykrytego typu
	}
end;

procedure main();
Begin
          // przykładowa inicjacja tablicy
             setlength( tab1, 5 );
	tab1[0] := 33;
	tab1[4] := 122;
	
	testy( [tab1] );	 
end;

probowalem jeszcze tak, ale blad kompilacji:
testy( tab1 );

a to dziaal prawidłowo, tylko mi chodzi o tablice dynamiczna
testy( [33, 0, 0, 0, 122] );

0

PODSTAWY.
To ([1,2, 3, 4....]) to przekazujesz poszczególne elementy tablicy.
To, co Ty chcesz zrobić powinieneś uzyskać za pomocą typu Variant.

0
Juhas napisał(a)

PODSTAWY.
To ([1,2, 3, 4....]) to przekazujesz poszczególne elementy tablicy.

Czyli nie da rady za pomocoą Array of Const przekazać tablicy dynamicznej, i jedynym wyjściem jest pzrekazanie tablicy jako Variant ?

Juhas napisał(a)

To, co Ty chcesz zrobić powinieneś uzyskać za pomocą typu Variant.</

probowalem tez na Variantach przekazac ta tablice ale tez cos nie takźle kombinuje

 
var 
   tab1 : array of integer; 

procedure testy(A : Variant);
begin
         showmessage( 'Liczba Elem Tablicy - 1 = ' + inttostr(high(A)) );

        {
          dalsze działania
 w zależnosci od wykrytego typu
        }
end;

procedure main();
Begin
          // przykładowa inicjacja tablicy
             setlength( tab1, 5 );
        tab1[0] := 33;
        tab1[4] := 122;
        
        testy( tab1 );         
end;
0

Sprawdziłem w najnowszym Delphi XE, i efekt jest taki: zapis

       testy([tab1]);

się kompiluje, ale liczba elementów tablicy wynosi 1 — cała tablica idzie jako pierwszy argument array of const.
zapis

       testy(tab1);

nadal się nie kompiluje, z błędem

delme.pas(22) Error: E2010 Incompatible types: 'array of TVarRec' and 'Dynamic array'
Zróbmy więc

       var tab1 : array of tvarrec;
       ...
       tab1[0].VInteger := 33;
       tab1[4].VInteger := 122;
       testy( tab1 );

i przechodzi.

Tylko czy jest sens tak kombinować?

0

Raczej takie kombinowanie nie ma sensu.

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