J'ai essayé de définir une classe TSingleton générique et héritable. Voici ce que j'avais en cours :
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;
L'objectif était de pouvoir "insérer" le modèle de singleton dans un arbre d'héritage. Ainsi, au lieu de déclarer quelque chose comme ceci :
TMySingletonComponent = class(TComponent)
end;
Pour mettre en œuvre le modèle de singleton, je devrais déclarer quelque chose comme ceci :
TMyGenericSingletonComponent = class(TSingleton<TMyGenericSingletonComponent,TComponent>)
end;
Malheureusement, cela ne fonctionnera pas. J'obtiens l'erreur suivante (dans D2010) :
TSingleton<RealClass, InheritsFrom : class> = class(InheritsFrom) ///E2021 Class type required
Je me demandais si cela fonctionnerait dans Delphi XE. Existe-t-il un "hack" propre que je pourrais utiliser pour que cela fonctionne dans D2010 ? Y a-t-il des raisons fondamentales pour lesquelles cela ne peut pas fonctionner ?