2009-12-09 5 views

답변

37

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# 방식이 아닙니다.

+2

위의 코드에서 네이티브에서 관리되는 enum으로 캐스팅한다고 가정합니다. 매니지드에서 네이티브로가는 다른 길은 어떨까요? – Lopper

+5

정적 캐스팅은 두 가지 방법으로 친구가됩니다 ... nativeST = static_cast (managedST); – mcdave

+0

감사합니다 mcdave! :) – Lopper

1

에 따라 다릅니다. 예를 들어 기본 유형이 ushort 인 CLI enum이있는 경우 257의 vallue를 보유 할 수 없습니다. 기본적으로 CLI enum은 int를 기반으로하며 대부분의 경우에 적합합니다. 기본 C++ 코드에서 부호없는 32 비트 int/64 비트 int를 기본 유형으로 사용하는 경우 enum이있는 경우 CLI enum의 기본을 UInt32, long 또는 ulong으로 전환합니다.

+2

두 enum 모두 int 유형이므로이 문제가 발생하지 않습니다. 그러나이 경우 어떤 유형의 캐스트를 사용해야합니까? 그것은 const_cast, static_cast, dynamic_cast, reinterpret_cast, safe_cast 또는 C# 캐스트 (예 : (int))일까요? – Lopper

관련 문제