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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top