Delphi泛型类可以从它的类参数中下降吗?

Ken*_*ssa 4 delphi generics crtp delphi-2010 delphi-xe

我一直在尝试定义一个通用的,可继承的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;
Run Code Online (Sandbox Code Playgroud)

目标是能够在继承树中"插入"单例模式.所以不要声明这样的事情:

  TMySingletonComponent = class(TComponent)

  end;
Run Code Online (Sandbox Code Playgroud)

并且需要在那里实现单例模式,我会声明这样的事情:

  TMyGenericSingletonComponent = class(TSingleton<TMyGenericSingletonComponent,TComponent>)
  end;
Run Code Online (Sandbox Code Playgroud)

可悲的是,这不起作用.我收到以下错误(在D2010中):

  TSingleton<RealClass, InheritsFrom : class> = class(InheritsFrom) ///E2021 Class type required
Run Code Online (Sandbox Code Playgroud)

现在我想知道,这是否适用于Delphi XE?是否有一些"干净的黑客"我可以用来在D2010中完成这项工作?是否有一些根本原因导致这种情况无效?

Bar*_*lly 5

按照设计,您不能创建从其类型参数派生的泛型类.