ネイティブコードenum
から同じenum
値を含むマネージコードenum
に(C++/CLIで)キャストする正しい方法は何ですか?たとえば、C++/CLIの(int)
のようなC#のキャスト方法を使用することに違いはありますか?.
ネイティブコードが
enum shape_type_e
{
stUNHANDLED = 0, //!< Unhandled shape data.
stPOINT = 1 //!< Point data.
...
};
マネージコードは
public enum class ShapeType
{
Unhandled = 0,
Point = 1,
...
};
ネイティブからマネージドにキャストできます
shape_type_e nativeST = stPOINT;
ShapeType managedST = static_cast<ShapeType>(nativeST);
Debug.Assert(managedST == ShapeType::Point);
私は常にstatic_cast
を使用しますが、C#のキャスト方法ではありません。
場合によります。たとえば、基になるタイプがushortであるCLI列挙型がある場合、257の値を保持することはできません。デフォルトでは、CLI列挙型はintに基づいており、ほとんどの場合問題ありません。ネイティブC++コードが列挙型の基になる型としてunsigned32bit ints/64bit intsを使用する場合は、CLI列挙型のベースをlongまたはulongのUInt32に切り替えます。