Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.15;
Скачать: CL | DM;

Вниз

Вопрос !!!   Найти похожие ветки 

 
Vladi78   (2008-05-21 16:51) [0]

Подскажите можно ли передавать функции неопределенное количество парметров, не создавая массивов или еще каких ни будь списков ?

Например, одной функции иногда передавать 2 параметра, иногда три ...
Или обязательно нужно сажать все параметры в массив, затем передавать массив в целом ???


 
Putnik ©   (2008-05-21 16:53) [1]

Директива overload не подходит?


 
Anatoly Podgoretsky ©   (2008-05-21 16:54) [2]

> Vladi78  (21.05.2008 16:51:00)  [0]

Можно, смотри тему OpenArrays


 
Vladi78   (2008-05-21 17:13) [3]

Не соображу как использовать в данном случаи OpenArrays, подскажите ... Под рукой ни одного учебника а интернет лимитный :((


 
Kolan ©   (2008-05-21 17:16) [4]

> Можно, смотри тему OpenArrays

Я конечно поняимаю, что он сначала Open, а потом все остальное, но таки массив.


 
han_malign ©   (2008-05-21 17:25) [5]

function f(params: array of integer): integer;
begin
   Result:= Low(Params);
   while(Result <= High(Params))do begin
       if(Params[Result] = 17)then exit;
       inc(Result);
   end;
end;
...............
var ar: array[byte]of integer;
    dar: array of integer;
............
res:= f(ar);
res:= f(dar);
res:= f([1, -1, 17, 3245872934]);
-------------------------------------------------
function f2(params: array of const): integer;
begin
   Result:= Low(Params);
   while(Result <= High(Params))do begin
       if((Params[Result].VType = vtInteger) and (Params[Result].VInteger = 17))then exit;
       inc(Result);
   end;
end;
...................
f2([@ar, "boo", true, 17, TForm]);


 
Умище   (2008-05-21 17:27) [6]

Можно и без массива, если число параметров ограничено известным числом и типами данных.

function FuncTest(aStr: String=""; aInt: Integer=-1; aBool; Boolean=False): Boolean;


 
MsGuns ©   (2008-05-21 17:28) [7]

TList


 
Renegat   (2008-05-21 17:35) [8]

Юзай стэк! PUSH + CALL и вся недолга! Главное, положить ДО параметров какое-нибудь терминирующее значение, типа 0BADC0DEh итп, по которому функция будет определять, что больше вынимать из стека ничего не надо.

ЗЫ: блин, плачут по мне лавры Кулибина %)


 
Умище   (2008-05-21 17:36) [9]


> не создавая массивов или еще каких ни будь списков ?


 
MsGuns ©   (2008-05-21 17:41) [10]

А-а-а-а.. Не в теме ;(


 
Renegat   (2008-05-21 17:45) [11]

А вообще телепатор нашёптывает, что нужны всего-навсего параметры "по умолчанию". Проставь в заголовке функции третьему параметру некое значение, показывающее, что параметр передан не был: func DoSmth(param1:DWORD; param2:string; param3:Byte=255);


 
palva ©   (2008-05-21 18:22) [12]

Имеется директива varargs, которая правда довольно ограничена по сфере применения. Цитирую справку:

When importing a C function that takes a variable number of parameters, use the varargs directive. For example,

function printf(Format: PChar): Integer; cdecl; varargs;

The varargs directive works only with external routines and only with the cdecl calling convention.



Страницы: 1 вся ветка

Текущий архив: 2008.06.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
9-1171341313
ryryr
2007-02-13 07:35
2008.06.15
Puzzle


2-1211436068
DBGridEh
2008-05-22 10:01
2008.06.15
DBGridEh


15-1209550659
palva
2008-04-30 14:17
2008.06.15
Начнут конфисковывать


2-1211216757
Stepper
2008-05-19 21:05
2008.06.15
В какую библиотек входят следующие Компоненты?


2-1211516042
AlekseyB
2008-05-23 08:14
2008.06.15
при нажатии на кнопку