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

Вниз

В Delphi можно сравнивать записи одного типа?   Найти похожие ветки 

 
Artem   (2012-01-19 18:57) [0]

В Delphi можно сравнивать записи одного типа?
=
<>


 
Dimka Maslov ©   (2012-01-19 19:20) [1]

нет


 
Самуилыч   (2012-01-19 19:44) [2]

CompareMem, если в записях нет указателей (в том числе объектов, динамических массивов, длинных строк и т.п.).


 
Anatoly Podgoretsky ©   (2012-01-19 21:00) [3]

И выравнивание отключено :-)


 
oxffff ©   (2012-01-19 21:52) [4]

Можно. Можно и разных.
Read
http://docwiki.embarcadero.com/RADStudio/en/Operator_Overloading_%28Delphi%29


 
KilkennyCat ©   (2012-01-20 04:21) [5]

ну на равенство я бы еще понял смысл, удалить дубликаты... а меньше-больше - если такой смысл есть, то с головой явно беда.


 
megavoid ©   (2012-01-20 12:06) [6]

> Operator_Overloading
так можно и строку на запись умножить :)


 
Inovet ©   (2012-01-20 12:17) [7]

> [5] KilkennyCat ©   (20.01.12 04:21)
> а меньше-больше - если такой смысл есть, то с головой явно беда.

Ну почему нет, если такая опереция определена над множеством.

> [6] megavoid ©   (20.01.12 12:06)
> так можно и строку на запись умножить :)

Аналогично.


 
jack128_   (2012-01-20 12:52) [8]


> ну на равенство я бы еще понял смысл, удалить дубликаты.
> .. а меньше-больше - если такой смысл есть, то с головой
> явно беда.

на например чтоб длинную арифметику реализовать. и соответсвтенно, чтоб мождно было на больше меньше две записи "TBigInt" сравнивать.


 
Дмитрий Белькевич   (2012-01-20 14:22) [9]


> ну на равенство я бы еще понял смысл, удалить дубликаты.
> .. а меньше-больше - если такой смысл есть, то с головой
> явно беда.


Да ладно... Мало ли какие данные там хранятся и что с ними нужно делать. Хотя бы для сортировки записей тем же квиксортом.


 
Самуилыч   (2012-01-20 14:31) [10]

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


 
Inovet ©   (2012-01-20 14:39) [11]

> [10] Самуилыч   (20.01.12 14:31)
> Так в чем же польза?

В том что пишется один шаблон
if a < b
а компилятор в зависимости от типа подставит что надо именно для этого типа.


 
KilkennyCat ©   (2012-01-21 01:38) [12]


> jack128_   (20.01.12 12:52) [8]
> Дмитрий Белькевич   (20.01.12 14:22) [9]

понятно. с арифметикой особенно убедило.
хотя, мне кажется, чаще всего записи -винегрет сплошной, хрен их на меньше больше целиком сравнишь. точнее, хрен поймешь результат. или мне везет просто на такие записи.


 
Германн ©   (2012-01-21 02:43) [13]


> KilkennyCat ©   (21.01.12 01:38) [12]
>
>
> > jack128_   (20.01.12 12:52) [8]
> > Дмитрий Белькевич   (20.01.12 14:22) [9]
>
> понятно. с арифметикой особенно убедило.

Меня тоже пример с арифметикой убедил. Но...


 
Anatoly Podgoretsky ©   (2012-01-21 11:11) [14]

Нельзя снять выровненые записи, они полны мусора


 
oxffff ©   (2012-01-21 12:05) [15]

Из моего кода

 TExpressionValueAbstractPenalty=record
 private
 PenaltyCountP,PenaltyCountN: DWORD;
 public
 constructor create(PenaltyCountP,PenaltyCountN: DWORD);
 class operator Add(a:TExpressionValueAbstractPenalty;b:TExpressionValueAbstractPenalty):TExpres sionValueAbstractPenalty;
 class operator Equal(a:TExpressionValueAbstractPenalty;b:TExpressionValueAbstractPenalty):boole an;
 class operator LessThan(a:TExpressionValueAbstractPenalty;b:TExpressionValueAbstractPenalty):bo olean;
 class operator GreaterThan(a:TExpressionValueAbstractPenalty;b:TExpressionValueAbstractPenalty) :boolean;
 end;

 TExpressionValueAbstractPriority = record
 private
 PriorityClass:TExpressionValueAbstractPriorityClass;
 Penalty:TExpressionValueAbstractPenalty;
 public
 constructor create(PriorityClass: TExpressionValueAbstractPriorityClass;
                    PenaltyCountP: DWORD;
                    PenaltyCountN: DWORD);
 class operator Equal(a:TExpressionValueAbstractPriority;b:TExpressionValueAbstractPriority):boo lean;
 class operator LessThan(a:TExpressionValueAbstractPriority;b:TExpressionValueAbstractPriority): boolean;
 class operator GreaterThan(a:TExpressionValueAbstractPriority;b:TExpressionValueAbstractPriorit y):boolean;
 end;

Пример использования

....

     if ((DestExpression.GetPriority > LeftPriority) and
         (LocalPriority < RightPriority)) or
         ((DestExpression.GetPriority < LeftPriority) and
         (LocalPriority > RightPriority)) then
       begin
         raise Exception.create("Ошибка! Critical error 49949  :)");
       end;
       if (DestExpression.GetPriority > LeftPriority) then
       begin
         LeftPriority := DestExpression.GetPriority;
         RightPriority := LocalPriority;
         AdditionalPenalty := LocalAdditionalPenalty;
         lValidatorResult.Left := DestExpression;
         lValidatorResult.Right := RightValueExpr;
       end
       else if (DestExpression.GetPriority = LeftPriority) then
         if LocalPriority > RightPriority then
         begin
           LeftPriority := DestExpression.GetPriority;
           RightPriority := LocalPriority;
           AdditionalPenalty := LocalAdditionalPenalty;
           lValidatorResult.Left := DestExpression;
           lValidatorResult.Right := RightValueExpr;
         end
         else if LocalPriority = RightPriority then
           if LocalAdditionalPenalty < AdditionalPenalty then
           begin
             LeftPriority := DestExpression.GetPriority;
             RightPriority := LocalPriority;
             AdditionalPenalty := LocalAdditionalPenalty;
             lValidatorResult.Left := DestExpression;
             lValidatorResult.Right := RightValueExpr;
           end
           else if LocalAdditionalPenalty = AdditionalPenalty then
           begin
             lValidatorResult.Left := nil;
             lValidatorResult.Right := nil;
           end;
................


 
oxffff ©   (2012-01-21 12:11) [16]

Этот пример из кода который пытается разрешить неоднозначность при присваивании в зависимости от приоритетов и дополнительных действий


 
KilkennyCat ©   (2012-01-21 12:17) [17]


> oxffff ©   (21.01.12 12:05) [15]

надеюсь, ты не копи-пасте делал, а так, по памяти сюда вогнал :)


 
oxffff ©   (2012-01-21 12:34) [18]

Да, нет это копипаст.
Это место неоднократно переписывалось при введении сначала penalty по upcast, потом классу выражений, потом downcast.
А если намек на то, что можно написать более составное условие для

LeftPriority := DestExpression.GetPriority;
RightPriority := LocalPriority;
AdditionalPenalty := LocalAdditionalPenalty;
lValidatorResult.Left := DestExpression;
lValidatorResult.Right := RightValueExpr;

то на это есть свои причины.



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

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

Наверх




Память: 0.52 MB
Время: 0.009 c
9-1191912113
bioSerg
2007-10-09 10:41
2012.05.27
Возникла проблема с Direct3d на новых карточках ATI x2000


15-1327042259
OW
2012-01-20 10:50
2012.05.27
Придумал как повысить производительность труда :)


2-1327425569
sem
2012-01-24 21:19
2012.05.27
Вызов процедуры


15-1326659402
Юрий
2012-01-16 00:30
2012.05.27
С днем рождения ! 16 января 2012 понедельник


3-1276183014
REX
2010-06-10 19:16
2012.05.27
Вывод времени в QRDBText