【发布时间】:2017-07-21 05:19:03
【问题描述】:
我试图在 Delphi 10.1 Berlin 中执行以下操作,但编译器返回消息“F2084 Internal Error: AV0A785E48-R000000-10-0”:
TMyType = (mtValue1, mtValue2);
TMyBaseClass = class
private
FMyType: TMyType;
public
property MyType: TMyType read FMyType write FMyType;
end;
TMyClass = class(TMyBaseClass)
private
FOtherField: Integer;
public
property OtherField: Integer read FOtherField write FOtherField;
end;
TMyBaseProcess1<T: TMyBaseClass> = class
strict private
FMyClass: T;
strict protected
type
TMyTypeHelper = record Helper for TMyType
public
function ToString: string;
end;
public
constructor Create(AMyClass: T);
procedure DoSomething;
end;
TMyProcess1 = class(TMyBaseProcess1<TMyClass>)
end;
TMyBaseProcess2<T: TMyBaseClass> = class
strict private
FMyClass: T;
strict protected
type
TMyTypeHelper = record Helper for TMyType
public
function ToInteger: Integer;
end;
public
constructor Create(AMyClass: T);
procedure DoSomethingElse;
end;
TMyProcess2 = class(TMyBaseProcess2<TMyClass>)
end;
TMyBaseProcess1 中的助手与 TMyBaseProcess2 中的助手完全不同。我可以毫无问题地将助手和类分开。我只想知道为什么我不能让他们在一起。
有谁知道问题出在哪里?我可以这样使用泛型、嵌套记录助手和继承吗?
【问题讨论】:
-
编译器缺陷。提交错误报告。嵌套泛型类型的记录助手看起来很奇怪。
-
不使用记录助手就不能直接写实现吗?
-
大卫赫弗南。谢谢您的帮助。我的示例仅用于演示。实际情况有点不同。
-
阿尔贝托·米奥拉:对不起这个例子。这只是一个测试用例,而不是真实情况。在实际情况下我无法直接在记录中实现。我将更改示例以获得更好的示例。
-
肯定是编译器缺陷,ICE 总是这样。但是代码可能无论如何都不应该编译。助手和通用实例化真的没有意义。编写没有该结构的代码。
标签: delphi generics inheritance record helper