![]() |
AW: Wieder generische Functions results
OK ich habs!
Kann man das irgendwie ohne RTTI hinbekommen?
Delphi-Quellcode:
Class Function TWSClient.GetClient<T>(Addr: string):T;
var RIO: THTTPRIO; aGuid:TGuid; begin Result := nil; RIO := GetLocalRio; try //Result := (RIO as T);//[dcc32 Fehler] E2015 Operator ist auf diesen Operandentyp nicht anwendbar //Result := T(RIO);//Das geht Aber es produziert zugriffsverletzungen... dank Refcount; aGuid := TRttiInterfaceType(TRttiContext.Create.GetType(TypeInfo(T))).GUID ; if not Supports(RIO,aGuid,Result) then Result := nil; RIO.URL := Addr finally if (Result = nil) then RIO.Free; end; End; |
AW: Wieder generische Functions results
So kompilierts:
Edit: Oh du hast auch grad gepostet.. Ohne RTTI fällt mir auch keine Lösung ein... Ist auch RTTI aber mit weniger overhead vielleicht?
Delphi-Quellcode:
uses
TypInfo; guid := PTypeInfo(TypeInfo(T))^.TypeData^.GUID;
Delphi-Quellcode:
uses System.RTTI; class function TForm3.GetClient<T>(Addr: string): T; var RIO: THTTPRIO; rtti: TRttiContext; intfType: TRttiInterfaceType; begin Result := nil; RIO := nil; try rtti := TRttiContext.Create; try intfType := rtti.GetType(TypeInfo(T)) as TRttiInterfaceType; if Supports(RIO, intfType.GUID, Result) then RIO.URL := Addr else Result := nil; finally rtti.Free; end; finally if (Result = nil) then RIO.Free; end; end; |
AW: Wieder generische Functions results
Ich fürchte einfach das die unit Typinfo irgendwann weg ist....
Aber danke für deine Lösung, das verschafft mir doch nochmal ein sicheres Gefühl das der Ansatz nicht zu unorthodox ist. |
AW: Wieder generische Functions results
Ich mag ja Generics aber das hier erscheint nen bisschen unnötig.
Warum nicht einfach:
Delphi-Quellcode:
Denn mit deiner Implementierung kommst du auch um einen Check nicht drumherum (obs Result von GetClient<T> assigned ist)
function GetClient(Addr: string): IInterface;
var RIO: THTTPRIO; begin RIO := GetLocalRio; RIO.URL := Addr; Result := RIO; end; if Supports(GetClient('...'), IBlaBlubb, LBlaBlubb) then |
AW: Wieder generische Functions results
Zitat:
Solange es die RTTI gibt, wird es auch die Unit TypInfo geben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz