C++/CLI:从非托管枚举转换为托管枚举

Lop*_*per 28 enums casting native c++-cli managed

从本机代码enum转换为enum包含相同enum值的托管代码的正确方法(在C++/CLI中)是什么?使用C#方式进行(int)编译是否有任何区别,例如在C++/CLI中.

mcd*_*ave 39

假设您的本机代码是

enum shape_type_e
{
    stUNHANDLED     = 0,            //!< Unhandled shape data.
    stPOINT         = 1             //!< Point data.
    ...
};
Run Code Online (Sandbox Code Playgroud)

你的托管代码是

public enum class ShapeType
{
    Unhandled   = 0,
    Point       = 1,
    ...
};
Run Code Online (Sandbox Code Playgroud)

您可以从托管转换为本机使用

shape_type_e nativeST = stPOINT;
ShapeType managedST = static_cast<ShapeType>(nativeST);
Debug.Assert(managedST == ShapeType::Point);
Run Code Online (Sandbox Code Playgroud)

我总是使用static_cast,而不是C#的铸造方式.

  • 静态演员是你的朋友双方... nativeST = static_cast <shape_type_e>(managedST); (7认同)
  • 从上面的代码中,我想你是从本机转换为托管枚举.那么从托管到本地的另一种方式呢? (2认同)