Search code examples
enumscastingc++-clinativemanaged

C++/CLI : Casting from unmanaged enum to managed enum


What is the correct way of casting (in C++/CLI) from a native code enum to a managed code enum which contain the same enum values? Is there any difference with using the C# way of casting like for example (int) in C++/CLI.


Solution

  • Assuming your native code is

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

    and your managed code is

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

    You can cast from the native to the managed using

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

    I always use static_cast, not the C# way of casting.