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.
%Vor%...
%Vor%Die Funktion funktioniert wie erwartet ohne Speicherlecks oder andere unerwünschte Effekte.
Gibt es andere Möglichkeiten, um das gleiche Ergebnis zu erzielen?
Es gibt einen Fehler in diesem Code. Supports zerstören Ihre Objektinstanz, wenn sie IUnknown
unterstützt, aber nicht die gewünschte Schnittstelle.
Einfache Demonstration:
%Vor% Am besten fügen Sie IInterface
oder IUnknown
als zusätzliche Einschränkung zu T
hinzu.
Oder stellen Sie sicher, dass Sie eine bereits zerstörte Instanz nicht zerstören.
Wenn Sie nicht dynamische QueryInterface
-Implementierungen unterstützen wollen (wo die Klasse die Schnittstelle nicht implementiert, aber QueryInterface
sie zurückgibt), würde ich mit einem Supports
-Aufruf für die Klasse gehen:
Tags und Links delphi generics interface delphi-xe7