I持って、次のコードDelphiのインターフェイス汎用関数 - 回避策はありますか?
IProxy<T> = interface
['{1E3A98C5-78BA-4D65-A4BA-B6992B8B4783}']
function Setup : ISetup<T>;
function Proxy : T;
function CastAs<I : IInterface> : IInterface;
end;
コンパイルするときに受信したコンパイラエラーを回避する方法はありますか?
「[DCCのエラー] Delphi.Mocks.pas(123):E2535インタフェースのメソッドは、パラメータ化メソッドあってはならない」
を基本的に私は、このインタフェースが回されていて、それをオフにキャストできるようにしたいと思い、キャストする型を渡して、その型を返します。私はクラスでこれを達成できますが、インターフェイスを回ることを好むでしょう。
追加情報:
は、新たに要求されたキャストは、新しい仮想インタフェースを作成することができるようCastAsが、ここでうまく機能
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;
私は以下のクラスを持っていると言います。今、私はこのクラスをその罰金の周りに渡したいと思っています。しかし、私がインターフェイスとしてそれを必要とする場合、すなわちTInterfaceProxy<T> = class(TBaseProxy<T>, IProxy<T>)
それは理解できません。それに同意しないで、理解してください。
したがって、どのように私はCastAs関数を呼び出すことができるように、タイプ(任意のインターフェイスタイプ)を渡し、そこから仮想インターフェイスを作成できるようにこの制限を回避しますか?
ありがとうございます。私はTGUIDが通過するために行って、それと一緒に生きなければならないと信じています。また、クラスを外部に公開しますが、インターフェイス "function CastAs(const IID:TGUID):IInterface;"内部。私は "あなたの言語にプログラムすることができます"ということを望みます。http://programmers.stackexchange.com/questions/2777/what-are-the-key-points-of-code-complete – Jason
また、 function CastAs :I; 'コードをコピーしている間違い。 – Jason