Я пытался определить общий наследуемый класс 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? Есть ли фундаментальные причины, по которым это не может работать?