Classe generics et forward déclaration
Bonjour,
J'utilise Delphi 2009 et les generics en abondance. Mais je rencontre un problème avec ce code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
interface
uses
Generics.Collections, Classes;
type
TPersistentList<T : class, IPersistentObject<T>> = class(TObjectList<T>)
private
FAssociatedDAO : IDAO<T>;
public
constructor Create(AssociatedDAO : IDAO<T>);
destructor Destroy; override;
function GetById(Id : Integer) : T;
procedure Update(ToUpdate : T);
procedure Save;
end;
IPersistentObject<T : class> = interface (IInterface)
function GetId : Integer;
procedure SetId(Id : Integer);
end;
IDAO<T : class, IPersistentObject<T>> = interface(IInterface)
function GetList() : TPersistentList<T>;
end; |
donc comme vous pouvez le remarquer, il y a dépendance circulaire entre IDAO<T : class, IPersistentObject<T>> qui renvoi un TPersistentList<T> et TPersistentList<T : class, IPersistentObject<T>> qui garde un référence vers IDAO<T>
Je suis donc obligé de déclarer des classes en forward déclaration en en-tête de la partie interface mais voila, je n'arrive pas à déclarer correctement avec les generics !!
Si je déclare :
Code:
1 2 3 4 5
|
type
IPersistentObject<T> = interface;
IDAO<T : class, IPersistentObject<T>> = interface; |
J'ai l'erreur :
Code:
1 2
|
[DCC Erreur] BaseDAO.pas(41): E2037 La déclaration de 'IDAO<T>' diffère de la déclaration précédente |
au niveau de la déclaration :
Code:
1 2 3 4
|
IDAO<T : class, IPersistentObject<T>> = interface(IInterface)
function GetList() : TPersistentList<T>;
end; |
J'ai essayé de mettre en forward declaration : IDAO<T> = interface; IDAO<T : class> = interface;
Toujours le même message d'erreur !
Si quelqu'un à une idée ...