Помощник класса для универсального класса?

Нулевой вектор уже нормализован, при любом определении нормы вектора, с которым я когда-либо сталкивался, так что это один случай, который рассматривается.

Что касается вектора с компонентами, сумма которых равна нулю - это зависит от того, какое определение нормы вы используете. С простой старой L2-нормой (евклидовым расстоянием между началом и вектором) стандартная формула для вычисления нормализованного вектора должна работать нормально, поскольку она сначала возводит в квадрат отдельные компоненты.

8
задан jpfollenius 21 October 2009 в 11:35
поделиться

2 ответа

Как описано в справке Delphi, помощники классов не предназначены для общего использования, и они неправильно воспринимаются как имеющие ряд ограничений или даже в результате ошибок.

тем не менее, есть представление - неправильное и опасное, на мой взгляд, - что это законный инструмент в «инструментарии» общего назначения. Я писал в блоге , почему это неправильно , а затем о том, как можно каким-то образом снизить опасность, следуя социально ответственному шаблону кодирования (хотя даже это не пуленепробиваемое) .

Вы можете добиться значительного эффекта помощника класса без каких-либо этих ошибок или ограничений или (что наиболее важно) рисков , используя жесткое приведение к «псевдо» класс, производный от класса, который вы пытаетесь расширить. т.е. вместо:

TFooHelper = class helper for TFoo
  procedure MyHelperMethod;
end;

использовать

TFooHelper = class(TFoo)
  procedure MyHelperMethod;
end;

Как и в случае с «формальным» помощником, вы никогда не создаете экземпляр этого класса TFooHelper , вы используете его исключительно для изменения класса TFoo , за исключением в этом случае вы должны быть точными. В вашем коде, когда вам нужно использовать некоторый экземпляр TFoo с помощью ваших «вспомогательных» методов, вам необходимо жестко привести его:

   TFooHelper(someFoo).MyHelperMethod;

Недостатки:

  1. вы должны придерживаться тех же правил, которые применяются помощникам - нет данных о членах и т. д. (на самом деле это не недостаток, за исключением того, что компилятор не будет «напоминать вам»).

13
ответ дан 5 December 2019 в 05:19
поделиться

Насколько я могу судить, нет никакого способа поместить помощник класса в общий класс и заставить его скомпилировать. Вы должны сообщить об этом QC как об ошибке.

7
ответ дан 5 December 2019 в 05:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: