2016-07-29 6 views
8

Czy istnieje sposób umieszczenia zagnieżdżonych wyliczeń w Delphi na własną przestrzeń nazw?Własna przestrzeń nazw dla zagnieżdżonych enums w Delphi

Ten kod generuje E2004: Identyfikację redeclared, ponieważ oba wyliczenia zawierają "nieznany".

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; 

w C++ identyfikatorów elementów enum były zarówno w differnet zakresów (TMyType1 :: nieznane i TMyType2 :: nieznane).

Czy istnieje możliwość osiągnięcia czegoś podobnego w Delphi z wyjątkiem pre- lub przyrostków identyfikatorów (MyType1EnumUnknown, MyType1EnumVal1, ..., MyType2Enumunknown, ...)?

+1

Poniższa odpowiedź jest doskonały, ale z standardów kodowania punktu widzenia, prefiksy są zwykle wykorzystywane w Delphi za teksty stałe. Spójrz na 'TFontStyle', jako przykład. Jego definicja wygląda następująco: 'TFontStyle = (fsBold, fsItalic, fsUnderline, fsStrikeOut)' – Graymatter

Odpowiedz

10

Wypróbuj $SCOPEDENUMS. Od 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; 
+0

FWIW, docwiki wydaje się być offline, właśnie teraz. Ale ta sama dokumentacja znajduje się w zainstalowanych plikach pomocy dołączonych do Delphi/RAD Studio. Po prostu nie możemy połączyć się z tym, stąd. –

Powiązane problemy