Und ohne die Forward-Deklarationen sieht der Code auch gleich viel übersichtlicher aus.
Delphi-Quellcode:
interface
type
IKlasse1 = interface end;
IKlasse2 = interface end;
Klasse0<T: IKlasse1, IKlasse2> = class(TInterfacedObject)
function Transform: T;
end;
Klasse1 = class(Klasse0<IKlasse1>) end;
Klasse2 = class(Klasse0<IKlasse2>) end;
implementation
end.
Ich hätte zwar auch ODER gedacht, aber wenn das stimmt, dann kannst du das vielleicht über eine Interfacevererbung lösen:
Delphi-Quellcode:
type
IBasisKlasse = interface end;
IKlasse1 = interface(IBasisKlasse) end;
IKlasse2 = interface(IBasisKlasse) end;
Klasse0<T: IBasisKlasse> = class(TInterfacedObject) // oder Klasse0<T: IBasisKlasse> = class(TInterfacedObject, IBasisKlasse)
function Transform: T;
end;
Klasse1 = class(Klasse0<IKlasse1>) end;
Klasse2 = class(Klasse0<IKlasse2>) end;
Oder du schränkst es nicht all zu sehr ein:
Delphi-Quellcode:
type
IKlasse1 = interface end;
IKlasse2 = interface end;
Klasse0<T: interface> = class(TInterfacedObject)
function Transform: T;
end;
Klasse1 = class(Klasse0<IKlasse1>) end;
Klasse2 = class(Klasse0<IKlasse2>) end;
[edit]
Ich mein natürlich IKlasse0, statt IBasisKlasse