Delphi 中嵌套枚举的自己的命名空间

own namespace for nested enums in Delphi

有没有办法将 Delphi 中的嵌套枚举放入自己的命名 space 中?

此代码生成 E2004:标识符已重新声明,因为两个枚举都包含 "unknown"。

TMyType1 = class
public type
  TMyType1Enum = (unknown, val1, val2);
public
  constructor Create();
  ...
end;

TMyType2 = class
public type
  TMyType2Enum = (unknown, other1, other2, other3); // causes E2004
public
  constructor Create();
  ...
end;

在 C++ 中,枚举元素的标识符都在不同的范围内(TMyType1::unknown 和 TMyType2::unknown)。

是否有可能在 Delphi 中实现类似的东西,除了在标识符前面或后缀(MyType1EnumUnknown、MyType1EnumVal1、...、MyType2Enumunknown、...)?

尝试$SCOPEDENUMS。来自 http://docwiki.embarcadero.com/RADStudio/en/Scoped_Enums_(Delphi):

type
  TFoo = (A, B, Foo);
  {$SCOPEDENUMS ON}
  TBar = (A, B, Bar);
  {$SCOPEDENUMS OFF}

begin
  WriteLn(Integer(Foo)); 
  WriteLn(Integer(A)); // TFoo.A
  WriteLn(Integer(TBar.B));
  WriteLn(Integer(TBar.Bar));
  WriteLn(Integer(Bar)); // Error
end;