enum
yerel kodundan enum
kodlu bir koddan enum
aynı enum
değerlerini içeren yönetilen bir kod için doğru yol (C++/CLI'de) nedir? C++/CLI'de örneğin (int)
gibi C# döküm yöntemini kullanmanın bir farkı var mıdır?C++/CLI: Yönetilen enum'dan yönetilen enum'a dönüştürme
cevap
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.
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.
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
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
Statik oyuncu arkadaşın iki yoludur ... nativeST = static_cast (managedST); –
mcdave
Teşekkürler mcdave! :) – Lopper