gpt4 book ai didi

Delphi:强制捕获匿名方法的 "unused"变量

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

我在一个过程中有一个变量,我需要保持该变量的事件状态,直到该过程中的匿名方法运行为止,但我不在匿名方法中使用该变量。有没有一种惯用的方法告诉编译器无论如何都要捕获变量?

例如:

procedure ForceCapture(const AVar);
begin
// No-op
end;

procedure TMyClass.MyProcedure;
var
Rec: TSearchRec;
begin
CallAnonMethod(@Rec,
procedure(retVal: Integer);
begin
ForceCapture(Rec); // What should this be?
if retVal = 0 then ...
end;
end;

上述内容适用于 Win32,但我担心 LLVM 后端或某些 future 的优化会识别出 ForceCapture 不会执行任何操作,并将捕获作为无操作删除。在这种情况下,CallAnonMethod 必须采用指针,而不是引用,因此不能在其中创建副本。

最佳答案

我在我的一个 Android 应用程序中采取了类似的做法。 (德尔福10.2.3)

procedure TMyClass.MyProcedure;
var
Rec: TSearchRec;
begin
CallAnonMethod(@Rec,
procedure(retVal: Integer);
var
LocalRec: TSearchRec;
begin
LocalRec := Rec; // yes, it actually works
if retVal = 0 then ...
end;
end;

关于Delphi:强制捕获匿名方法的 "unused"变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52635819/

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