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 인터페이스 방법은 매개 변수화 방법이 안된다"나는이 인터페이스를 건네 줄 수가 있고 그것을 버리 수 있도록하고 싶습니다 기본적으로
을, 에 캐스트 할 유형을 전달하고 해당 유형을 리턴합니다. 클래스를 사용하여이 작업을 수행 할 수 있지만 인터페이스 주위를 돌아 다니는 것이 더 좋습니다.
추가 정보 :
내가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 잘 여기에 새로 요청 캐스트가 새로운 가상 인터페이스를 생성 할 수 있습니다로 작동 다음 클래스를 말한다. 이제이 클래스를 벌금 주위로 전달하고 싶습니다. 그러나 인터페이스 (예 : TInterfaceProxy<T> = class(TBaseProxy<T>, IProxy<T>)
)가 필요한 경우이를 이해할 수 없습니다. 그것에 동의하지 말고 이해하십시오.
따라서 CastA 함수를 호출하고 유형 (모든 인터페이스 유형)을 전달하고 가상 인터페이스를 생성 할 수 있도록이 제한 사항을 해결하려면 어떻게해야합니까?
감사합니다. 나는 TGUID가 지나가고 가서 그걸로 살아야한다고 믿습니다. 또한 클래스를 외부에 노출 시키지만 인터페이스 "function CastAs (const IID : TGUID) : IInterface;"를 유지하십시오. 내부의. "프로그램을 당신의 언어로, 그렇지 않으면" "http://programmers.stackexchange.com/questions/2777/what-are-the-key-points-of-code-complete – Jason
" function CastAs : 나는 코드를 복사하는 실수를 저지른다. – Jason