我一直在试图定义一个通用的,可继承的TSingleton类。以下是我正在进行的操作:Delphi泛型类可以从它的类参数中下降吗?
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中完成这项工作?有没有一些根本的原因,为什么这不能工作?
在其他圈子中,你所问的是*好奇的循环模板模式*,但泛型不是模板。 – 2010-10-21 22:15:05