2016-07-29 24 views
8

İç içe yerleştirilmiş sayımları Delphi'ye kendi adlandırma alanına yerleştirmenin bir yolu var mı?kendi ad alanı

Bu kod, her iki numara da "bilinmeyen" içerdiği için bir E2004: Tanımlayıcı tanımlayıcısı oluşturur. C++ enum elemanlarının tanımlayıcıları

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; 

hem differnet teleskoplarda (TMyType1 :: bilinmeyen ve TMyType2 :: bilinmiyor) idi.

Delphi'de tanımlayıcıları önceden veya son ek dışında (MyType1EnumUnknown, MyType1EnumVal1, ..., MyType2Enumunknown, ...) dışında böyle bir şey elde etme olanağı var mı?

+1

aşağıda cevap mükemmeldir ancak bir görüş kodlama standartları açısından, ön ekler normalde çeteleler için Delphi kullanılmaktadır. Örnek olarak 'TFontStyle' bölümüne bakınız. Tanım şu şekildedir: 'TFontStyle = (fsBold, fsItalic, fsUnderline, fsStrikeOut)' – Graymatter

cevap

10

$SCOPEDENUMS'u deneyin. http://docwiki.embarcadero.com/RADStudio/en/Scoped_Enums_(Delphi) Gönderen:

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, şu an docwiki çevrimdışı görünüyor. Ancak aynı belgeler Delphi/RAD Studio ile gelen yüklü yardım dosyalarında bulunabilir. Buradan bağlantı kuramayız. –