Ich habe den folgenden CodeDelphi-Schnittstelle generische Funktion - Gibt es eine Arbeit?
IProxy<T> = interface
['{1E3A98C5-78BA-4D65-A4BA-B6992B8B4783}']
function Setup : ISetup<T>;
function Proxy : T;
function CastAs<I : IInterface> : IInterface;
end;
Gibt es eine Möglichkeit, um den Compiler-Fehler zu arbeiten, die empfangen wird beim Kompilieren?
„[DCC Error] Delphi.Mocks.pas (123): Methoden E2535 Schnittstelle muss nicht parametriert Methoden haben“
Grundsätzlich ich diese Schnittstelle um der Lage weitergegeben haben möchte und dass es abzustreifen, indem Sie den Typ übergeben, an den der Typ übergeben und zurückgegeben werden soll. Ich kann das mit einer Klasse erreichen, würde aber lieber eine Schnittstelle weitergeben.
Zusätzliche Information:
sagen, dass ich die folgende Klasse eine neue virtuelle Schnittstelle erstellt werden können
TInterfaceProxy<T> = class(TBaseProxy<T>)
private type
TProxyVirtualInterface = class(TVirtualInterface)
private
FProxy : TInterfaceProxy<T>;
protected
public
function QueryInterface(const IID: TGUID; out Obj): HRESULT; override; stdcall;
constructor Create(AProxy : TInterfaceProxy<T>; AInterface: Pointer; InvokeEvent: TVirtualInterfaceInvokeEvent);
end;
private
FVirtualInterfaces : TDictionary<TGUID, TProxyVirtualInterface>;
protected
function InternalQueryInterface(const IID: TGUID; out Obj): HRESULT; stdcall;
function QueryInterface(const IID: TGUID; out Obj): HRESULT; override;
function Proxy : T;override;
function CastAs<I: IInterface> : I;
public
constructor Create;override;
destructor Destroy;override;
end;
Castas gut funktioniert hier als die neu angeforderten Besetzung. Nun, wenn ich diese Klasse gut durchziehen will. Allerdings, wenn ich es als Schnittstelle, d. H. TInterfaceProxy<T> = class(TBaseProxy<T>, IProxy<T>)
benötigen, funktioniert es nicht, dass zu verstehen. Stimme nicht damit überein, aber verstehe es.
Wie kann ich diese Einschränkung umgehen, so dass ich eine CastAs-Funktion aufrufen, einen Typ übergeben kann (einen beliebigen Schnittstellentyp) und in der Lage sein muss, daraus eine virtuelle Schnittstelle zu erstellen?
Danke. Glauben Sie, ich werde für die TGUID gehen müssen und damit leben. Wird auch die Klasse extern offen legen, aber behalten Sie die Schnittstelle "Funktion CastAs (const IID: TGUID): IInterface;" intern. Wünschte, ich könnte "Programm in Ihre Sprache, nicht darin" http://programmers.stackexchange.com/questions/2777/what-are-the-keypoint-of-code-complete – Jason
Auch ja Ihr richtig über die ' Funktion CastAs: I; 'ein Fehler beim Kopieren des Codes über. –
Jason