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 作为构建块在库中生成非托管枚举值的集合,然后您可以使用它来迭代非托管枚举。