C++ / CLI: Conversión de enum no administrado a enum administrado


¿Cuál es la forma correcta de convertir (en C++/CLI) de un código nativo enum a un código administrado enum que contenga los mismos valores enum? Hay alguna diferencia con el uso de la forma de C# de casting como por ejemplo (int) en C++/CLI.

Author: Lopper, 2009-12-09

2 answers

Asumiendo que su código nativo es

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

Y su código administrado es

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

Puede convertir desde el gestionado al nativo usando

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

Siempre uso static_cast, no la forma de C# de lanzar.

 38
Author: mcdave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-10 04:54:26

Depende. por ejemplo, si tiene una enumeración CLI que tiene un tipo subyacente de ushort, no puede contener un value de 257. De forma predeterminada, la enumeración de la CLI se basa en int, lo que debería estar bien en la mayoría de los casos. Si su código nativo de C++ utiliza ints de 32 bits/ints de 64 bits como el tipo subyacente if enums, cambie la base de su enum de CLI a UInt32, long o ulong.

 1
Author: Sheng Jiang 蒋晟,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-09 22:47:01