在C++/CLI中,从本地代码enum
转换为包含相同enum
值的托管代码enum
的正确方法是什么?与使用C#转换方式(例如在C++/CLI中使用(int)
)有什么区别。
假设您的本地代码是
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#中的转换方式。
这要看情况。例如,如果您有一个 CLI 枚举,其基础类型为 ushort,则无法保存值为 257 的枚举值。默认情况下,CLI 枚举基于 int,这在大多数情况下应该是可以的。如果您的本机 C++ 代码使用无符号 32 位整数/64 位整数作为枚举的基础类型,请将 CLI 枚举的基础更改为 UInt32、long 或 ulong。
nativeST = static_cast(managedST);
- mcdave