zmienna ilość argumentów procedury

0

Witam.

Czy ktoś byłby w stanie mi pomóc w takiej sprawie:
W czasie działania programu chcę wywoływać metody różnych klas, których nazwy zawarte są w pliku tekstowym wybieranym przez użytkownika. W tym celu napisałem funkcję wyszukującą te metody (m.in. z wykorzystaniem MethodAddress).
Mam też zdefiniowany typ:

Proc = procedure of object;

Dzięki temu mogę wywołać procedurę bezargumentową. Problem polega jednak na tym że te metody mogą mieć dowolną ilość i typ argumentów! Owszem, mogę zdefiniować parę dodatkowych typów z różnymi zestawami argumentów i wykorzystać rzutowanie ale jak zrobić żeby procedura sama "dostosowywała się" i można było w ten sposób wywołać dowolną metodę bez względu na ilośc i typ jej argumentów?

0

Takie rzeczy to tylko przez tablicę. Inaczej nie da rady.

0

Takie rzeczy to tylko w C# :-)

A na poważnie, to musiałbyś pokombinować (z tablicami .. lub class of TObject jako parametr procedury), choć to wymaga dokładnego sprawdzenia, deklaracji i testów (odwołanie do zmiennych przez pola klasy).

0

tablica warjantów jako jedyny parametr każdej procedury/funkcji - tu trochę więcej o warjantach http://www.borland.pl/tech/t_com2.shtml

0

a moze jakies operacje na rejestrach i stosie :P, sorki jesli zabardzo odbiegam od tematu

0

Na rejestrach i stosie? Masz na myśli rozwiązanie a'la cdecl? Gdyby Delphi miało makra to dałoby się nawet osiągnąć - niejawnie przekazywana ilość argumentów dodatkowych za ostatnim jawnym argumentem /ew. jako pierwszy gdy jawnych brak/. Cóż, Delphi to nie Lisp ;P - makra Lispa to w sumie funkcje w nim napisane zwracające listę stanowiącą... kod w Lispie. Pozwala to wygenerować dowolny kod na bazie dowolnych danych wejściowych - chcecie makro tłumaczące brainfucka na Lispa? nie ma sprawy, w tym tkwi potęga tego języka. :>
Albo wlaśnie - istnieje pewna funkcja WINAPI, która przyjmuje nieokreśloną ilość argumentów /co prawda bazuje na łańcuchu formatującym/ - wsprintf. Nie znam w sumie Delphi jakio takiego ale jedyny sposób jaki widzę do użycie kontenera opakowującego argumenty. Czystą nieokreśloną ilość argumentów uzyskuje się w innych językach tworząc /niejawnie/ listę argumentów, ew. słownik - w Lispie &rest, w pythonie * bądź **, ale te języki posiadają listę jako typ wbudowany, podstawowy /z resztą Lisp to LISt Processing/... hm, nieco odbiegłem od tematu, może lepiej już skończę.

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