Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.01 c
2-1211218610
ZazA
2008-05-19 21:36
2008.06.15
преобразование битмапа


15-1209629962
Алексин
2008-05-01 12:19
2008.06.15
Wi-Fi в квартире


15-1209883938
Slider007
2008-05-04 10:52
2008.06.15
С днем рождения ! 4 мая 2008 воскресенье


15-1209657757
NaRuTo
2008-05-01 20:02
2008.06.15
Bink32.dll


2-1211321993
deras
2008-05-21 02:19
2008.06.15
Как в Edit сделать так, чтоб текст при вводе помещался справа?




   Наверх