imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 15.01.2004, 18:55     # 1
PLP
Junior Member
 
Регистрация: 16.07.2002
Сообщения: 113

PLP Путь к славе только начался
Вопрос: передача параметров функций в Delphi

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

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

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

Заранее спасибо!
PLP вне форума  
Старый 15.01.2004, 20:08     # 2
SpacerV
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;
А насчет переменного числа параметров, то в Об. Паскале (Delphi) этого вроде делать нельзя, кроме как передавать параметры в массиве переменной длинны.
 
Старый 16.01.2004, 12:20     # 3
CEO
Full Member
 
Аватар для CEO
 
Регистрация: 31.08.2003
Адрес: где-то между Марсом и Юпитером
Сообщения: 998

CEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собой
Цитата:
А насчет переменного числа параметров, то в Об. Паскале (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
__________________
Старые игры раздают здесь
CEO вне форума  
Старый 16.01.2004, 12:38     # 4
Legion2003
Member
 
Аватар для Legion2003
 
Регистрация: 31.05.2003
Адрес: Russia, St.Petersburg
Сообщения: 232

Legion2003 Луч света в тёмном царствеLegion2003 Луч света в тёмном царствеLegion2003 Луч света в тёмном царствеLegion2003 Луч света в тёмном царствеLegion2003 Луч света в тёмном царстве
Если заранее не известно, какого типа параметры (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]);
__________________
Пиво должно быть правильным.
Вот водка - правильное пиво!
Legion2003 вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


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




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