gpt4 book ai didi

delphi - 如何从 TRttiMethod 获取/创建匿名方法?

转载 作者:行者123 更新时间:2023-12-03 15:57:08 26 4
gpt4 key购买 nike

我想将TRttiMethod作为匿名方法处理。我怎样才能做到这一点?

以下是我希望事情如何运作的简化示例:

界面:

TMyClass = class
public
// this method will be acquired via Rtti
procedure Foo;

// this method shall return above Foo as anonymous method
function GetMethodAsAnonymous: TProc;
end;

实现:

function TMyClass.GetMethodAsAnonymous: TProc;
var
Ctx: TRttiContext;
RttiType: TRttiType;
RttiMethod: TRttiMethod;
begin
Ctx := TRttiContext.Create;
try
RttiType := Ctx.GetType(Self.ClassType);
RttiMethod := RttiType.GetMethod('Foo');

Result := ??????; // <-- I want to put RttiMethod here - but how?
finally
Ctx.Free;
end;
end;

最佳答案

如果你真的想要一个匿名方法,那么就创建一个匿名方法:

Result := procedure
begin
RttiMethod.Invoke(Self, []);
end;

您还可以构造一个简单的方法指针:

var
Method: procedure of object;

TMethod(Method).Code := RttiMethod.CodeAddress;
TMethod(Method).Data := Self;
Result := Method;

最直接的方法当然是根本不使用RTTI:

Result := Foo;

关于delphi - 如何从 TRttiMethod 获取/创建匿名方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10879916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com