Что является самым изящным (или наименее ужасным), способ использовать типизированные константы в 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
в исходном коде, но возможно путем взгляда значения на время выполнения)? Мы предполагаем здесь, что Вы не измените значение "константы" во времени выполнения.
В зависимости от того, почему вам нужно, чтобы константа была типизированной, вы можете попробовать что-то вроде
const
MY_REAL_CONST = Cardinal($12345678);
MY_CONST: Cardinal = MY_REAL_CONST;
case MyExpression of
MY_REAL_CONST: { Do Something };
...
end;
Если вы не будете изменять значение константы, вам не нужно, чтобы она была типизированной константой. Компилятор может взять объявленное вами число и правильно поместить его в любую переменную или параметр, которому вы его назначили. Типизированные константы - это своего рода уловка, и они фактически реализованы как переменные, поэтому компилятор не может использовать их как константы, значение которых необходимо зафиксировать во время компиляции.
Типизированные константы не могут быть использованы в операторах case, потому что типизированная константа на самом деле больше статическая переменная (и присваиваемая...), и поэтому не может использоваться в операторе case, который ожидает константы.