C++/CLI:通过非连续枚举循环



我正在围绕C#库编写一个C++/CLI包装器。库公开了一个具有非连续数值的枚举(这超出了我的控制范围,我永远不会自己添加,但为了向后兼容性,需要维护它(

enum MyCSEnum
{
Value1 = 1,
Value2 = 2,
Value3 = 3,
Value4 = 5,
Value5 = 7,
Value6 = 10,
Value7 = 13
};

有没有办法在c++/clr中循环这个枚举?我不能在数字上循环,因为基本值是不连续的。我知道在C#中,基于范围的循环是可能的,但在C++/CLI中如何做到这一点

Enum::GetValues将返回一个包含所有有效枚举值的数组。调用该方法,并对结果进行迭代。

显然,这需要有问题的枚举是托管枚举,而不是非托管C++枚举。您显示的示例枚举似乎是一个非托管枚举,但如果这是C#库的包装器,那么您可能可以使用该枚举的托管版本。

您还可以使用Enum::GetValues作为构建块,在库中生成非托管枚举值的集合,然后可以使用该集合对非托管枚举进行迭代。

否。

C++/CLI是C++的扩展,C++没有反射。对此需要进行反思。

您必须维护一个"有效"值数组,和/或使用一些宏技巧。

最新更新