C ++ / CLI: L oop через непостоянное перечисление - PullRequest
0 голосов
/ 24 февраля 2020

Я пишу оболочку C++/CLI вокруг библиотеки C#. Библиотека предоставляет перечисление с непостоянными значениями чисел c (что мне не подвластно, и я бы никогда, никогда бы не добавил это сам, но его необходимо поддерживать для обратной совместимости)

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

Есть ли способ l oop над этим перечислением в c++/clr? Я не могу l oop численно пройти через это, поскольку базовые значения не являются непрерывными. Я знаю, что в C# возможен l oop на основе диапазона, но как это сделать в C++/CLI

Ответы [ 2 ]

3 голосов
/ 24 февраля 2020

Enum::GetValues вернет массив, содержащий все допустимые значения перечисления. Вызовите этот метод и переберите результат.

Очевидно, что для этого требуется, чтобы рассматриваемое перечисление было управляемым перечислением, а не неуправляемым перечислением C ++. Представленный вами пример перечисления выглядит как неуправляемое перечисление, но если это оболочка библиотеки C#, то, вероятно, существует управляемая версия этого перечисления, которую вы можете использовать.

Вы также можете использовать Enum::GetValues в качестве строительного блока для создания коллекции неуправляемых значений перечисления в библиотеке, которую затем можно использовать для перебора неуправляемого перечисления.

1 голос
/ 24 февраля 2020

Нет.

C ++ / CLI является расширением C ++, и C ++ не имеет отражения. Для этого потребуется отражение.

Вам нужно будет поддерживать массив «допустимых» значений и / или использовать некоторые макро-трюки.

...