C++/CLI:遍历非连续枚举
C++/CLI: Loop through non-continuous enum
我正在围绕 C# 库编写 C++/CLI
包装器。该库公开了一个具有非连续数值的枚举(这是我无法控制的,我永远不会,永远不会自己添加它,但为了向后兼容需要维护它)
enum MyCSEnum
{
Value1 = 1,
Value2 = 2,
Value3 = 3,
Value4 = 5,
Value5 = 7,
Value6 = 10,
Value7 = 13
};
有没有办法在 c++/clr
中循环这个枚举?我无法以数字方式遍历它,因为基础值是不连续的。我知道在 C#
中可以进行基于范围的循环,但是在 C++/CLI
中如何实现
没有
C++/CLI是对C++的扩展,C++没有反射。为此需要反思。
您必须维护 "valid" 个值的数组,and/or 使用一些宏技巧。
Enum::GetValues
将 return 一个包含所有有效枚举值的数组。调用该方法,并迭代结果。
显然,这要求所讨论的枚举是托管枚举,而不是非托管 C++ 枚举。您显示的示例枚举似乎是一个非托管枚举,但如果这是 C# 库的包装器,那么您可能可以使用该枚举的托管版本。
您还可以使用 Enum::GetValues
作为构建块在库中生成非托管枚举值的集合,然后您可以使用它来迭代非托管枚举。
我正在围绕 C# 库编写 C++/CLI
包装器。该库公开了一个具有非连续数值的枚举(这是我无法控制的,我永远不会,永远不会自己添加它,但为了向后兼容需要维护它)
enum MyCSEnum
{
Value1 = 1,
Value2 = 2,
Value3 = 3,
Value4 = 5,
Value5 = 7,
Value6 = 10,
Value7 = 13
};
有没有办法在 c++/clr
中循环这个枚举?我无法以数字方式遍历它,因为基础值是不连续的。我知道在 C#
中可以进行基于范围的循环,但是在 C++/CLI
没有
C++/CLI是对C++的扩展,C++没有反射。为此需要反思。
您必须维护 "valid" 个值的数组,and/or 使用一些宏技巧。
Enum::GetValues
将 return 一个包含所有有效枚举值的数组。调用该方法,并迭代结果。
显然,这要求所讨论的枚举是托管枚举,而不是非托管 C++ 枚举。您显示的示例枚举似乎是一个非托管枚举,但如果这是 C# 库的包装器,那么您可能可以使用该枚举的托管版本。
您还可以使用 Enum::GetValues
作为构建块在库中生成非托管枚举值的集合,然后您可以使用它来迭代非托管枚举。