| imho.ws |
![]() |
|
|
|
# 1 |
|
Junior Member
Регистрация: 16.07.2002
Сообщения: 113
![]() |
Вопрос: передача параметров функций в Delphi
Можно ли в Делфе в функцию передавать переменное число параметров, тип каждого из которых может варьироваться - (т.е. заранее неизвестно сколько переменных, каких типов и в каком порядке передается)?
Пример (для чего это нужно): функция произведения матриц в которую можно было бы передавать вектор-строки, вектор-столбцы и квадратные матрицы (т.е. либо одномерные массивы длины n, либо двумерные nXn, разумеется в правильном порядке и с допустимой размерностью), а результатом тоже будет вектор или матрица - смотря что получится. Как можно такое реализовать? Заранее спасибо! |
|
|
|
|
# 2 |
|
Guest
Сообщения: n/a
|
PLP
Именно для твоего примера проще указать overload функции: Код:
type TVector = array of real; TMatrix = array of TVector; function VectorXMatrix(A: TVector; B: TMatrix): TVector; overload; function VectorXMatrix(A: TMatrix; B: TVector): TVector; overload; function VectorXMatrix(A: TMatrix; B: TMatrix): TMatrix; overload; |
|
|
# 3 | |
|
Full Member
Регистрация: 31.08.2003
Адрес: где-то между Марсом и Юпитером
Сообщения: 998
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Код:
procedure f(arg: array of const);
var i: Integer;
b: Boolean;
o: TObject;
c: TClass;
begin
i := arg[0].VInteger;
b := arg[1].VBoolean;
o := arg[2].VObject;
c := arg[3].VClass;
//...
end;
f([100, True, nil, TObject]); Добавлено через 6 минут: Так же смотри здесь: http://www.delphiworld.narod.ru/base..._any_type.html http://delphiworld.narod.ru/base/call_c_function.html http://www.delphiworld.narod.ru/base...ams_count.html
__________________
Старые игры раздают здесь |
|
|
|
|
|
# 4 |
|
Member
Регистрация: 31.05.2003
Адрес: Russia, St.Petersburg
Сообщения: 232
![]() ![]() ![]() ![]() ![]() |
Если заранее не известно, какого типа параметры (Integer, Float etc.), можно использовать функцию VarArrayOf
Код:
procedure SendEvent(Event: String; const Params: Variant);
var i: Integer;
begin
for i := Low(Params) to High(Params) do;
end;
.......
SendEvent('Bla-Bla', VarArrayOf([1,2,3,4]);
__________________
Пиво должно быть правильным. Вот водка - правильное пиво! |
|
|