我想为一个泛型类定义一个类类型(类型别名),这样单元B的用户就可以访问TMyType,而不用使用单元a。我有这样的单元:
unit a;
interface
type
TMyNormalObject = class
FData: Integer;
end;
TMyType<T> = class
FData: <T>;
end;
implementation
end.
unit b;
interface
type
TMyNormalObject = a.TMyNormalObject; // works
TMyType<T> = a.TMyType<T>; // E2508 type parameters not allowed on this type
implementation
end.
我已经找到了一个可能的变通方案,但我不喜欢它,因为它可能会引入难以找到的bug:
TMyType<T> = class(a.TMyType<T>);
这种方法的问题在于它引入了一个新的类类型,并且a.TMyType示例不是b.TMyType(而a. TMyNormalClass是b.TMyNormalClass,反之亦然--它们引用的是同一个类)。
3条答案
按热度按时间ymdaylpp1#
目前还不能为泛型类声明类类型。
有关更多信息,请参见QC76605。还有下面的更新。
示例:
显示的解决方法如下所示:
但正如所评论的那样,这将挫败泛型的整个思想,因为类必须为每个泛型示例化子类化。
下面还有一个链接,指向生成泛型类型的专用子类的类似解决方法:derive-from-specialized-generic-types。在本例中,它将如下所示:
型
更新日期:
RM提出的解决方案:
可以使用以下方案实现类型安全:
当创建泛型类时,进行测试以检查所创建的类是从单元B中声明的类型导出的。由此检测从单元a创建该类的所有尝试。
更新2:
需要说明的是,对泛型类“
class of type<T>
“的引用是不可能的,但泛型类的副本是可以的。hfyxw5xn2#
因为不可能为泛型类声明“类型别名”,所以这里有一个使用interface的解决方案。
6ie5vjzr3#