Да, это так. Вышеупомянутый тип в Delphi будет
TYPE
EnumOfUChars = (EnumValue1 = $10, EnumValue2 = $20);
Однако, где перечисления в C ++ являются просто псевдонимами для значений int, они являются различными типами в Delphi. Другими словами, тогда как в C ++ вы можете сделать:
int c = EnumValue1;
, вы не можете сделать это - напрямую - в Delphi. Вышеприведенное должно быть определено как
VAR C : INTEGER = ORD(EnumValue1);
, где "ORD" является Delphi эквивалентом (но не идентичным) типа int в C ++.
Аналогично, противоположное направление :
C++: EnumOfUChars E = 0x22;
Это невозможно сделать (не нарушая тип enum) в Delphi, так как значение $ 22 не является допустимым значением enum. Тем не менее, вы можете принудительно выполнить это:
Delphi: VAR E : EnumOfUChars = EnumOfUChars($22);
Если вы хотите использовать двоичные значения для перечислений в Delphi (что будет предлагаться в приведенном выше определении), вам нужно будет сделать это с помощью SET OF EnumOfUChars, как в:
C++ : EnumOfUChars C = EnumValue1 | EnumValue2;
Delphi: VAR C : SET OF EnumOfUChars = [EnumValue1,EnumValue2];
и для проверки:
C++ : if (C & EnumValue1)...
Delphi: IF EnumValue1 IN C THEN...
Таким образом, вы можете выполнить sh то же самое в Delphi относительно перечислений, но способ вы делаете это иначе, чем в C ++.