Подтвердить что ты не робот

С++/CLI: литье из неуправляемого перечисления в управляемое перечисление

Каков правильный способ кастинга (в С++/CLI) из собственного кода enum в управляемый код enum, который содержит те же значения enum? Есть ли разница с использованием метода С# для каста, например, как (int) в С++/CLI.

4b9b3361

Ответ 1

Предполагая, что ваш родной код

enum shape_type_e
{
    stUNHANDLED     = 0,            //!< Unhandled shape data.
    stPOINT         = 1             //!< Point data.
    ...
};

и ваш управляемый код

public enum class ShapeType
{
    Unhandled   = 0,
    Point       = 1,
    ...
};

Вы можете привести от родного к управляемому, используя

shape_type_e nativeST = stPOINT;
ShapeType managedST = static_cast<ShapeType>(nativeST);
Debug.Assert(managedST == ShapeType::Point);

Я всегда использую static_cast, а не С# способ приведения.

Ответ 2

Это зависит. например, если у вас есть перечисление CLI, которое имеет базовый тип ushort, оно не может содержать значение 257. По умолчанию перечисление CLI основано на int, что в большинстве случаев должно быть прекрасным. Если ваш собственный код на С++ использует 32-битные ints/64bit ints в качестве базового типа, если перечисляет, переключите базу вашего перечисления CLI на UInt32, длинный или улунный.