Procedura/Funkcja z argumentem dowolnego typu // PASCAL

0

Potrzebowal bym w pascalu napisac funkcje, ktora moze przyjmowac element obojetnie jakiego typu. Za przyklad moge tu dac procedure new:
new(nazwa:wskaznik);
Procedura new moze przyjmowac wskaznik obojetnie jakiego typu..
Czy wie ktos jaki sposobem moze to byc realizowane ?

Pozdrawiam... :)

0

Pascal implementuje coś takiego jak zmienne nieokreślone. W delphi ten problem nie jest już tak istotny. To samo za sprawą zmiennych wariantowych, które mogą być czymkolwiek. Najczęściej zmienna nieokreślona traktowana jest jak ciąg bitów. Jakiś adres w pamięci jakiejś wielkości. Do przetwarzania takowych uzywałem asma. To samo można realizować za pomocą wskaźników.

0

Przez dowolny wskaźnik
Podobnym sposobem możesz przekazywać dowolne zmienne np. przez wskaźnik. Może nim być string, liczba, ale musiałbyś wiedzieć co z tym zrobić

Drugi sposób
Możesz też wykorzystać coś w stylu unii. Typ warunkowy.

type TUnia = record
Case 0:
x : Integer;
Case 1:
w1 : char;
w2 : char;
end;

procedure XYZ(U : TUnia);
....
U.x, U.w1

po zadeklarowaniu czegoś takiego możesz odwoływać się przez x do liczby, przez w1 do starszego bajtu, w2 młodszego. W ten sposób w Delphi działają messages'y

Można chyba też tylko przez var. Ale dokładnie nie pamiętam, chyba
procedure XYZ(var zmienna);

Wtedy operuje się na czystej pamięci i trzeba uważać żeby nie zawiesić komputera

0

Zgadza sie i wiem ze moge zrobic cos takiego:

type
  Pinteger=^integer;
var
  wsk_integer:Pinteger;

function
  zwroc_adres:pointer;
    //cialo funkcji...
begin
  wsk_integer:=zwroc_adres;  //rzutuje pointer(adres) na wskaznik integer
end.

Czyli interpretuje sobie te miejsce w pamieci jako integer (czy obojetnie jak inny typ), musze to robic recznie. Jednak standardowa procedura new sama rozpoznaje jakiego typu sa do niej wysylane dane, wiec jej wskaznik nie moze byc typu pointer, bo by zapomnial o rozmierze elementu.. :/
Zastanawiem sie czy jakos nie moge wykorzystac faktu, ze kazdy wskaznik w pascalu ma 4 bajty - czyli w wskazniku pointer teoretycznie tez jest miejsce na informacje o typie, ale jak ta informacje tam upchnac - nie wiem...
Chcialem podkreslic, ze chodzi mi o jezyk Pascal, a nie delphi, bo w tym drugim sprawa jest prosta :P...
pozdrawiam :)

// Panie Oleksy_Adamie ;0 skoro piszesz, ze "To samo można realizować za pomocą wskaźników." to moje rozumowanie z upchnieciem czegos do pointera jest dobre? Jakos to tak ze wskaznikami jest, ze tylko pierwsze 2 bajty jest na adres i 2 nastepne na typ (nie wiem czy dobrze proporcje dobralem :P) wiec mam odczytac po prostu te 2 ostanie bajty i je zinterpretowac.. ??

0
Oleksy_Adam napisał(a)

Pascal implementuje coś takiego jak zmienne nieokreślone. W delphi ten problem nie jest już tak istotny. To samo za sprawą zmiennych wariantowych, które mogą być czymkolwiek. Najczęściej zmienna nieokreślona traktowana jest jak ciąg bitów. Jakiś adres w pamięci jakiejś wielkości. Do przetwarzania takowych uzywałem asma. To samo można realizować za pomocą wskaźników.

Moglbys troszke rozwinac swoje wypowiedz.. albo wyjasni na jakiej zasadzie ma dzialac funkja, ktora moze przyjmowa elementy obojetnie jakiego typu ?

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