Типизированные константы Delphi в случае, если операторы

Что является самым изящным (или наименее ужасным), способ использовать типизированные константы в a case оператор в Delphi?

Таким образом, предположите для этого вопроса, что необходимо объявить типизированную константу как в

const
  MY_CONST: cardinal = $12345678;
  ...

Затем компилятор Delphi не примет

case MyExpression of
  MY_CONST: { Do Something };
  ...
end;

но необходимо записать

case MyExpression of
  $12345678: { Do Something };
  ...
end;

который подвержен ошибкам, трудно для обновления, и не изящный.

Есть ли любой прием, который можно использовать, чтобы заставить компилятор вставить значение константы (предпочтительно путем проверки значения константы под const в исходном коде, но возможно путем взгляда значения на время выполнения)? Мы предполагаем здесь, что Вы не измените значение "константы" во времени выполнения.

7
задан Bart 20 January 2013 в 14:03
поделиться

3 ответа

В зависимости от того, почему вам нужно, чтобы константа была типизированной, вы можете попробовать что-то вроде

const
  MY_REAL_CONST = Cardinal($12345678);
  MY_CONST: Cardinal = MY_REAL_CONST;

case MyExpression of
  MY_REAL_CONST: { Do Something };
  ...
end;
12
ответ дан 6 December 2019 в 12:46
поделиться

Если вы не будете изменять значение константы, вам не нужно, чтобы она была типизированной константой. Компилятор может взять объявленное вами число и правильно поместить его в любую переменную или параметр, которому вы его назначили. Типизированные константы - это своего рода уловка, и они фактически реализованы как переменные, поэтому компилятор не может использовать их как константы, значение которых необходимо зафиксировать во время компиляции.

4
ответ дан 6 December 2019 в 12:46
поделиться

Типизированные константы не могут быть использованы в операторах case, потому что типизированная константа на самом деле больше статическая переменная (и присваиваемая...), и поэтому не может использоваться в операторе case, который ожидает константы.

0
ответ дан 6 December 2019 в 12:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: