Converti oggetto al C ++ tipo built-in
-
30-09-2019 - |
Domanda
Ho il seguente codice minimo:
using namespace System;
long get_prop( Object^ v )
{
return Convert::ToInt32( v );
}
int main()
{
Object^ o1 = gcnew Int32( -1 );
Object^ o2 = gcnew UInt32( 0xFFFFFFFF );
long value1 = get_prop( o1 );
long value2 = get_prop( o2 );
return 0;
}
Si dà l'eccezione OverflowException
nella funzione get_prop
. Alla fine ho bisogno di usare il risultato di get_prop
in puro codice C ++. Qual è il modo corretto di scrivere la funzione get_prop
modo che possa funzionare senza eccezione in entrambi i casi. Posso utilizzare una sorta di modelli come in C ++ o c'è una soluzione più banale?
Soluzione
Hmya, si sta tentando di riempire un maiale a 32 bit in un 31-bit Poke. Questo codice finisce per chiamare Convert :: ToInt32 (valore UInt32) che assomiglia a questo:
public static int ToInt32(uint value)
{
if (value > 0x7fffffff)
{
throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
}
return (int) value;
}
Kaboom. Non so che tipo di comportamento di overflow che si desidera, ma questo permette al compilatore di fare il ignorando ed evita l'eccezione:
long get_prop( Object^ v )
{
return (long)Convert::ToInt64( v );
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow