Ich habe eine Funktion geschrieben, die einen Klassentyp (T) und einen Schnittstellentyp (I) akzeptiert und eine Schnittstelle (I) an das Objekt (T) zurückgibt. Hier ist der Code.Verwenden von Generics zum Erstellen eines verknüpften Objekts
interface
function CreateObjectInterface<T: Class, constructor; I: IInterface>(
out AObject: TObject): I;
...
implementation
function TORM.CreateObjectInterface<T, I>(out AObject: TObject): I;
begin
AObject := T.Create;
if not Supports(AObject, GetTypeData(TypeInfo(I))^.Guid, Result) then
begin
AObject.Free;
AObject := nil;
raise EORMUnsupportedInterface.CreateFmt(
'Object class "%s" does not support interface "%s"',
[AObject.ClassName, GUIDToString(GetTypeData(TypeInfo(I))^.GUID)]
);
end;
end;
Die Funktion arbeitet wie ohne Speicherlecks oder andere unerwünschte Personen erwartet.
Gibt es andere Möglichkeiten, um das gleiche Ergebnis zu erzielen?
Ich bin nicht sicher, dass diese Frage ist hier angebracht. Vielleicht wäre Code Review eine bessere Seite. Ihre letzte Frage ist sicherlich meinungsbezogen. Erste zwei Fragen. 1. Ja, das ist OK. 2. Nein, keine Probleme. –
Die letzte Frage umformulieren: "Gibt es andere Möglichkeiten, dasselbe Ergebnis zu erzielen?" –
@LURD - Ich habe die Frage umformuliert – norgepaul