У меня есть переменная в процедуре, которую нужно поддерживать до тех пор, пока не будет запущен анонимный метод в этой процедуре, но я не использую переменную в анонимном методе.Есть ли идиоматический способ сказать компилятору перехватить переменную в любом случае?
Например:
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 или некоторые другиебудущая оптимизация признает, что ForceCapture ничего не делает, и снимает захват как запрет.В этом случае CallAnonMethod должен принимать указатель, а не ссылку, поэтому создание копии внутри него не вариант.