Истинная замена статической локальной переменной C?

просто пытаюсь достичь аналогичной функциональности статических локальных переменных C / C ++ в ObjectPascal / Delphi. У нас есть следующая функция на C:

bool update_position(int x, int y)
{
    static int dx = pow(-1.0, rand() % 2);
    static int dy = pow(-1.0, rand() % 2);

    if (x+dx < 0 || x+dx > 640)
        dx = -dx;
    ...
    move_object(x+dx, y+dy);
    ...
}

Эквивалентный код ObjectPascal, использующий типизированные константы в качестве замены статической переменной, не компилируется:

function UpdatePosition(x,y: Integer): Boolean;
const
  dx: Integer = Trunc( Power(-1, Random(2)) );  // error E2026
  dy: Integer = Trunc( Power(-1, Random(2)) );
begin
  if (x+dx < 0) or (x+dx > 640) then
    dx := -dx;
  ...
  MoveObject(x+dx, y+dy);
  ...
end;

[Ошибка DCC] test_f.pas (332): E2026 Ожидается постоянное выражение

Так есть ли способ для одноразовой инициализированной локальной переменной?

6
задан David Unric 11 December 2011 в 11:29
поделиться