私は、ジェネリックで継承可能な 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でこれを機能させるために使用できる「クリーンハック」はありますか? これがうまくいかない根本的な理由はありますか?