Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

own namespace for nested enums in Delphi

Is there a way to put nested enumerations in Delphi into an own naming space?

This code produces an E2004: Identifier redeclared, as both enumerations contain "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;

In C++ the identifiers of the enum elements were both in differnet scopes (TMyType1::unknown and TMyType2::unknown).

Is there a possibility to achieve something like this in Delphi except pre- or suffixing the identifiers (MyType1EnumUnknown, MyType1EnumVal1, ..., MyType2Enumunknown,...)?

like image 490
Chris Avatar asked Jul 29 '16 09:07

Chris


1 Answers

Try $SCOPEDENUMS. From 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;
like image 143
Uli Gerhardt Avatar answered Oct 14 '22 08:10

Uli Gerhardt