30

从本机代码转换为包含相同值enum的托管代码(在 C++/CLI 中)的正确方法是什么?例如在 C++/CLI 中使用 C# 的转换方式有什么不同吗?enumenum(int)

4

2 回答 2

42

假设您的本机代码是

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# 的转换方式。

于 2009-12-10T04:54:26.007 回答
1

这取决于。例如,如果您有一个底层类型为 ushort 的 CLI 枚举,它不能保存 257 的值。默认情况下,CLI 枚举基于 int,这在大多数情况下应该没问题。如果您的本机 C++ 代码使用无符号 32 位整数/64 位整数作为枚举的基础类型,请将 CLI 枚举的基数切换为 UInt32、long 或 ulong。

于 2009-12-09T22:47:01.263 回答