четверг, 2 апреля 2015 г.

Смешное про Implicit

Есть класс:

 TmsShapeUID = record
  rValue: Int64;
  public
   class operator Add(anUID: TmsShapeUID; aDelta: Int64): TmsShapeUID;
   class operator Implicit(aValue: Int64): TmsShapeUID;
 end;//TmsShapeUID

Должно было быть так:

class operator TmsShapeUID.Implicit(aValue: Int64): TmsShapeUID;
begin
 Result.rValue := aValue;
end;

Но описался, и написал так:

class operator TmsShapeUID.Implicit(aValue: Int64): TmsShapeUID;
begin
 Result := aValue;
end;

И получил Stack Owerflow.

Что в общем-то - логично.

Но всё равно - смешно.

Я бы лично отсёк бы это на уровне компилятора. Ибо там - "делать нечего".

Есть "дерево разбора" и есть "его бесконечная рекурсия".

Ну и полный коммит - https://bitbucket.org/lulinalex/mindstream/commits/879c8e09bb457061e4fce20e238e9b1e151f387e

Он тоже по-моему - интересен.

Комментариев нет:

Отправить комментарий