2009-12-09 14 views

cevap

37

enum shape_type_e 
{ 
    stUNHANDLED  = 0,   //!< Unhandled shape data. 
    stPOINT   = 1    //!< Point data. 
    ... 
}; 

sizin yerel kod varsayarak ve yönetilen kod

public enum class ShapeType 
{ 
    Unhandled = 0, 
    Point  = 1, 
    ... 
}; 

Sen

shape_type_e nativeST = stPOINT; 
ShapeType managedST = static_cast<ShapeType>(nativeST); 
Debug.Assert(managedST == ShapeType::Point); 

Hep static_cast kullanmak kullanarak yerel başardı yayın yapabilirsiniz olduğunu dökümün C# yolu değil.

+2

Yukarıdaki koddan, yerel yönetilen enum için döküm yaptığınızı varsayalım. Yerel olarak yönetilen başka bir yoldan ne haber? – Lopper

+5

Statik oyuncu arkadaşın iki yoludur ... nativeST = static_cast (managedST); – mcdave

+0

Teşekkürler mcdave! :) – Lopper

1

Bu, bağlıdır. Örneğin, temel bir tür ushort olan bir CLI enum'unuz varsa, 257 bir valili tutamaz. Varsayılan olarak CLI enum int'ye dayanır, çoğu durumda iyi olması gerekir. Yerel C++ kodunuz, eğer enumlar ise alttaki tip olarak 32 bit ints/64bit ints kullanırsa, CLI enum'unuzun tabanını UInt32'ye uzun veya ulong olarak değiştirin.

+2

Bu sorunu almayacağım çünkü her iki enum int türündendir. Ancak bu durumda hangi tür dökümler kullanılmalıdır? Const_cast, static_cast, dynamic_cast, reinterpret_cast, safe_cast veya sadece C# cast (bir örnek (int)) olmalı mı? – Lopper