В Delphi 2006 введена перегрузка операторов, которая затем была исправлена в Delphi 2007. Это касается Delphi 2007.
Почему не компилируется следующее:
type
TFirstRec = record
// some stuff
end;
type
TSecondRec = record
// some stuff
end;
type
TThirdRec = record
// some stuff
class operator Add(_a: TFirstRec; _b: TSecondRec): TThirdRec;
end;
class operator TThirdRec.Add(_a: TFirstRec; _b: TSecondRec): TThirdRec;
begin
// code to initialize Result from the values of _a and _b
end;
var
a: TFirstRec;
b: TSecondRec;
c: TThirdRec;
begin
// initialize a and b
c := a + b; // <== compile error: "Operator not applicable to this operand type"
end.
Поскольку я объявил оператор, который добавляет два операнда a типа TFirstRec и b типа TSecondRec, что приводит к TThirdRec, я ожидал, что это скомпилируется.
(Если вам нужно что-то менее абстрактное, подумайте о TMyDate, TMyTime и TMyDateTime.)