我正在围绕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++没有反射。对此需要进行反思。
您必须维护一个"有效"值数组,和/或使用一些宏技巧。