Einzelnen Beitrag anzeigen

Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: TValue, Records und class operatoren

  Alt 31. Jul 2017, 12:50
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat