IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Вопрос: передача параметров функций в Delphi (https://www.imho.ws/showthread.php?t=48717)

PLP 15.01.2004 18:55

Вопрос: передача параметров функций в Delphi
 
Можно ли в Делфе в функцию передавать переменное число параметров, тип каждого из которых может варьироваться - (т.е. заранее неизвестно сколько переменных, каких типов и в каком порядке передается)?

Пример (для чего это нужно):
функция произведения матриц в которую можно было бы передавать вектор-строки, вектор-столбцы и квадратные матрицы (т.е. либо одномерные массивы длины n, либо двумерные nXn, разумеется в правильном порядке и с допустимой размерностью), а результатом тоже будет вектор или матрица - смотря что получится.

Как можно такое реализовать?

Заранее спасибо!

SpacerV 15.01.2004 20:08

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;

А насчет переменного числа параметров, то в Об. Паскале (Delphi) этого вроде делать нельзя, кроме как передавать параметры в массиве переменной длинны.

CEO 16.01.2004 12:20

Цитата:

А насчет переменного числа параметров, то в Об. Паскале (Delphi) этого вроде делать нельзя, кроме как передавать параметры в массиве переменной длинны.
Пример.
Код:

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

Legion2003 16.01.2004 12:38

Если заранее не известно, какого типа параметры (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]);



Часовой пояс GMT +4, время: 08:01.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.