Nur mal so hingeschludert:
Delphi-Quellcode:
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;
In 10.2 funktioniert das - ich erinner mich, dass es in einer älteren Version noch ein Problem mit Invoke bei class operators gab.