从本机代码转换为包含相同值enum
的托管代码(在 C++/CLI 中)的正确方法是什么?例如在 C++/CLI 中使用 C# 的转换方式有什么不同吗?enum
enum
(int)
问问题
23318 次
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 回答