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

Вниз

Универсальная переменная   Найти похожие ветки 

 
DDA ©   (2004-06-16 01:06) [0]

как бы мне сделать такую процедуру чтоб в параметрах можно было передавать любую переменую любого вида?
Возможноли это?


 
Gero ©   (2004-06-16 01:08) [1]

procedure a(const x);
begin

end;


 
GuAV ©   (2004-06-16 01:08) [2]

Procedure P1(var A);
Procedure P2(const A);


 
GuAV ©   (2004-06-16 01:09) [3]

Gero ©   (16.06.04 01:08) [1]
:) да, я торможу :)


 
DDA ©   (2004-06-16 01:34) [4]

вот теперь мне нужно эту переменную сбросить(обнулить,стереть,уничтожить,очистить)


 
GuAV ©   (2004-06-16 01:47) [5]


> сбросить(обнулить,стереть,уничтожить,очистить)

не зная что нельзя знать как.
зы - посмотри Variant types - может что надо.


 
Gero ©   (2004-06-16 01:49) [6]


> вот теперь мне нужно эту переменную сбросить(обнулить,стереть,уничтожить,очистить)

Какую переменную?


 
pasha_golub ©   (2004-06-16 06:11) [7]

Про обнуление это к IronHawk"y. :=)


 
y-soft ©   (2004-06-16 07:53) [8]

Есть еще распространенный способ - использование указателей на указатели


 
ПсихЪ   (2004-06-16 11:36) [9]

Мне подобное понадобилось при создании универсальной процедуры криптования record"ов. Я использовал такой приём:

procedure ProcName( var Data; Size : integer );
var
 i : integer;
begin
 for i := 0 to Size - 1 do
 begin
   TBytes(Data)[i] := {присваиваем что-нибудь байту c номером i}
 end;
end;


Вот пример простого шифрования произвольных record"ов:

procedure CryptData( var Data; Size : integer );
var
 i : integer;
begin
 for i := 0 to Size - 1 do
 begin
   TBytes(Data)[i] := TBytes(Data)[i] xor i;
 end;
end;

Вызывается так:

type
 RecordName1 = record
   r1 : integer;
   r2 : string[5];
 end;
 RecordName2 = record
   r1 : string[5];
   r2 : RecordName1;
 end;

var
 rn1 : RecordName1;
 rn2 : RecordName2;
begin
 rn1.r1 := 10;
 rn1.r2 := "niger";
 rn2.r1 := "niga";
 rn2.r2 := rn1;
 CryptData( rn1, SizeOf( RecordName1 ) );
 CryptData( rn2, SizeOf( rn2 ) );
end.

Вот.


 
Anatoly Podgoretsky ©   (2004-06-16 12:11) [10]

ПсихЪ   (16.06.04 11:36) [9]
Это не политкоректно


 
Igorek ©   (2004-06-16 14:49) [11]


> DDA ©   (16.06.04 01:06)  
> как бы мне сделать такую процедуру чтоб в параметрах можно
> было передавать любую переменую любого вида?
> Возможноли это?

Конечно возможно.


 
panov ©   (2004-06-16 14:52) [12]

function iif(isTrue: Boolean;aVar1,aVar2: Variant): Variant;
begin
 if isTrue then Result := aVar1 else Result := aVar2;
end;


 
Игорь Шевченко ©   (2004-06-16 14:59) [13]

panov ©   (16.06.04 14:52)

Сравни:

a := iif (true, 2, 1/0)

и

a = 1 ? 2 : 1/0;


 
panov ©   (2004-06-16 15:11) [14]

>Игорь Шевченко ©   (16.06.04 14:59) [13]
Сравни:

Не понял, что сравнить?


 
Игорь Шевченко ©   (2004-06-16 15:16) [15]

panov ©   (16.06.04 15:11)

Обычно функция iif позиционируется, как замена оператора ? : в C.
Ее отличие от оператора заключается в первую очередь в том, что все ее аргументы вычисляются перед вызовом функции, поэтому ее применение иногда может сопровождаться весьма интересными эффектами.


 
panov ©   (2004-06-16 15:19) [16]

Игорь Шевченко ©   (16.06.04 15:16) [15]
угу.
Проверил пример из Игорь Шевченко ©   (16.06.04 14:59) [13],

результат - 2
если вызвать a := iif (False, 2, 1/0) - Exception, как и предполагал-)


 
Anatoly Podgoretsky ©   (2004-06-16 15:29) [17]

Игорь Шевченко ©   (16.06.04 14:59) [13]
Сравни a := iif (true, 123, "abc")


 
Danilka ©   (2004-06-16 15:35) [18]

Кстати, в Д7, в модуле MathUtils (если не ошибаюсь) есть процедура IfThen, которая как-раз описывается как аналог оператора "?:", у нее точно также, аргументы вычисляются перед вызовом, или все-таки компилятор знает про нее и расписывает ее как конструкцию if .. then .. else ..?

Нет под рукой Д7, а интересно.



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

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

Наверх




Память: 0.51 MB
Время: 0.053 c
3-1086363411
kors
2004-06-04 19:36
2004.07.04
JPEG и базы данных


4-1082121116
Orion2
2004-04-16 17:11
2004.07.04
RegisterShellHookWindow


4-1085217844
trix
2004-05-22 13:24
2004.07.04
Как програмно нажать клавиши


3-1086667172
Smalik
2004-06-08 07:59
2004.07.04
SQL


14-1087302836
Кулюкин Олег
2004-06-15 16:33
2004.07.04
Кто пользовался для переезда компаниями-перевозчиками?