Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Универсальная переменная [D6, WinXP]


DDA ©   (2004-06-16 01:06:00) 

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


Danilka   (2004-06-16 15:35:00) [1]

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

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


Anatoly Podgoretsky   (2004-06-16 15:29:00) [2]

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


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

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

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


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

panov ©   (16.06.04 15:11)

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


panov   (2004-06-16 15:11:00) [5]

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

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


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

panov ©   (16.06.04 14:52)

Сравни:

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

и

a = 1 ? 2 : 1/0;


panov   (2004-06-16 14:52:00) [7]

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


Igorek   (2004-06-16 14:49:00) [8]


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

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


Anatoly Podgoretsky   (2004-06-16 12:11:00) [9]

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


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

Мне подобное понадобилось при создании универсальной процедуры криптования 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.

Вот.


y-soft   (2004-06-16 07:53:00) [11]

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


pasha_golub   (2004-06-16 06:11:00) [12]

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


Gero   (2004-06-16 01:49:00) [13]


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

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


GuAV   (2004-06-16 01:47:00) [14]


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

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


DDA   (2004-06-16 01:34:00) [15]

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


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

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


Gero   (2004-06-16 01:08:00) [17]

procedure a(const x);
begin

end;


GuAV   (2004-06-16 01:08:00) [18]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо