C ++ / CLI: Casting da enum non gestito a gestito enum
Domanda
Qual è il modo corretto di casting (in C ++ / CLI) da un enum
codice nativo ad un enum
codice gestito che contengono gli stessi valori enum
? C'è qualche differenza con l'utilizzo del # modo C di fusione, come ad esempio (int)
in C ++ / CLI.
Soluzione
Assumendo che il codice nativo è
enum shape_type_e
{
stUNHANDLED = 0, //!< Unhandled shape data.
stPOINT = 1 //!< Point data.
...
};
e il codice gestito è
public enum class ShapeType
{
Unhandled = 0,
Point = 1,
...
};
È possibile lanciare dal nativo del gestito utilizzando
shape_type_e nativeST = stPOINT;
ShapeType managedST = static_cast<ShapeType>(nativeST);
Debug.Assert(managedST == ShapeType::Point);
Io uso sempre static_cast
, non il C # modo di fusione.
Altri suggerimenti
Dipende. per esempio, se si dispone di un enum CLI che ha un tipo sottostante di ushort, non può tenere una vallue di 257. Di default l'enum CLI si basa su int, che dovrebbe andare bene nella maggior parte dei casi. Se i C ++ usa un codice nativo unsigned int a 32bit / 64bit int come tipo sottostante se enumerazioni, passare la base del CLI enum a UInt32, lungo o ulong.