Ric*_*d A 13 delphi delphi-2006
我在Delphi 2006中使用运算符重载记录.(请不要告诉我不要回答这个问题.)
我有两个记录类型,隐式运算符重载.它们都只是在模块的实现中,而不是通过接口公开.
我的问题是,既然它们是相互依赖的,我不知道如何将第二种类型转发给编译器.我知道如何使用函数,过程和类来执行此操作,但不知道如何使用记录.
这是我想要做的简化示例:
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;
Run Code Online (Sandbox Code Playgroud)
Rob*_*edy 13
您不能拥有记录类型的前向声明.Implicit
在第二种类型中定义两个运算符:
type
TMyRec1 = record
Field1 : Integer;
end;
TMyRec2 = record
Field2: Integer;
class operator Implicit(a: TMyRec2): TMyRec1;
class operator Implicit(a: TMyRec1): TMyRec2;
end;
Run Code Online (Sandbox Code Playgroud)
引自帮助:
只有在绝对必要时才应提供隐式转换,并应避免反身性.最好让类型B隐式地将自身转换为类型A,并且让类型A不知道类型B(反之亦然).
归档时间: |
|
查看次数: |
2445 次 |
最近记录: |