【发布时间】:2010-10-21 20:48:20
【问题描述】:
我一直在尝试定义一个通用的、可继承的 TSingleton 类。这是我正在进行的工作:
TSingleton<RealClass, InheritsFrom : class> = class(InheritsFrom)
strict private
class var FInstance : RealClass;
protected
procedure InstanceInitialization;virtual;
public
destructor Destroy; override;
class procedure Create; reintroduce;
class function Instance : RealClass;
class procedure InstanceFree;
end;
目标是能够将单例模式“插入”到继承树中。所以不要声明这样的东西:
TMySingletonComponent = class(TComponent)
end;
并且需要在那里实现单例模式,我会声明这样的内容:
TMyGenericSingletonComponent = class(TSingleton<TMyGenericSingletonComponent,TComponent>)
end;
很遗憾,这行不通。我收到以下错误(在 D2010 中):
TSingleton<RealClass, InheritsFrom : class> = class(InheritsFrom) ///E2021 Class type required
现在我想知道,这在 Delphi XE 中可以工作吗?是否有一些“干净的技巧”可以用来在 D2010 中完成这项工作?是否有一些根本原因导致这不起作用?
【问题讨论】:
-
在其他圈子中,您所问的是奇怪地重复出现的模板模式,但泛型不是模板。
标签: delphi generics delphi-2010 delphi-xe crtp