我一直在試圖定義一個通用的,可繼承的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