![]() |
TValue, Records und class operatoren
Hallo Zusammen!
Gibt es einen Trick um aus einen TValue Wert der ein Record ist eine Zuweisung über einen Class operator auszuführen?
Delphi-Quellcode:
TFoo = Record
Wert : String; Class operator implicit (AFoo : TFoo) : String; end;
Delphi-Quellcode:
Ich kenne den Typ des Records nicht... Da ich ihn ohne weitere Infos aus eine Klasse mit Field.GetValue geholt habe.
S := Value.AsString; // über den Class operator...
Grüsse Mavarik |
AW: TValue, Records und class operatoren
Nur mal so hingeschludert:
Delphi-Quellcode:
In 10.2 funktioniert das - ich erinner mich, dass es in einer älteren Version noch ein Problem mit Invoke bei class operators gab.
function GetStringFromRecordImplicit(const v: TValue): string;
var ctx: TRttiContext; m: TRttiMethod; params: TArray<TRttiParameter>; begin for m in ctx.GetType(v.TypeInfo).GetMethods do if (m.MethodKind = mkOperatorOverload) and SameText(m.Name, '&op_Implicit') and Assigned(m.ReturnType) and (m.ReturnType.Handle = TypeInfo(string)) then begin params := m.GetParameters; if (Length(params) = 1) and (params[0].ParamType.Handle = v.TypeInfo) then Exit(m.Invoke(nil, [v]).AsString); end; raise EInvalidOpException.Create('matching implicit operator not found'); end; |
AW: TValue, Records und class operatoren
Super Danke... Funktioniert.
Man könnte es ja ggf. mit einer normalen Methode machen nach dem Motto "Function ToString : String" suchen... aber das "&op_Implicit" muss man natürlich wissen.... Mavarik |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 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