I am using the operator overloading for records in Delphi 2006. (Please don't answer this question by telling me not to.)
I have two record types with the implicit operator overloaded. They are both only in the implementation of the module, not exposed through the interface.
My problem is, now that they are mutually dependent, I don't know how to forward declare the second type to the compiler. I know how to do this with functions, procedures, and classes, but not with records.
Here is a simplified example of what I am trying to do:
implementation
type
TMyRec1 = record
Field1 : Integer;
class operator Implicit(a: TMyRec2): TMyRec1; // <---- Undeclared Identifier here.
end;
TMyRec2 = record
Field2: Integer;
class operator Implicit(a: TMyRec1): TMyRec2;
end;
class operator TMyRec1.Implicit(a:TMyRec2): TMyRec1;
begin
Result.Field1 := a.Field2;
end;
class operator TMyRec2.Implicit(a:TMyRec2): TMyRec2;
begin
Result.Field2 := a.Field1;
end;
You might be able to do this with record helpers.
Below is what I recently did to work around the impossibility of having a
forward record
record declaration.It uses the
record helper
construct, which - likeimplicit type casts
- have drawbacks too.The most important one being that only the nearest
record helper
for a particularrecord
type will apply.You use it like this:
--jeroen
You can't have forward declarations for record types. Define both
Implicit
operators in the second type:Quoting from the help: