将对象转换为C ++内置类型
-
30-09-2019 - |
题
我有以下最小代码:
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;
}
它给出了 OverflowException
例外 get_prop
功能。最后,我需要使用 get_prop
在纯C ++代码中。什么是正确的写作方法 get_prop
功能使其在两种情况下都可以无一例外地工作。我可以在C ++中使用某种模板或其他琐碎的解决方案吗?
解决方案
hmya,您正在尝试在31位戳中塞入32位猪。此代码最终调用Convert :: TOINT32(UINT32值),该代码看起来像这样:
public static int ToInt32(uint value)
{
if (value > 0x7fffffff)
{
throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
}
return (int) value;
}
kaboom。不确定您想要什么样的溢出行为,但这使编译器可以忽略并避免例外:
long get_prop( Object^ v )
{
return (long)Convert::ToInt64( v );
}
不隶属于 StackOverflow