我有以下最小代码:
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
例外。最后,我需要在纯C ++代码中使用get_prop
的结果。编写get_prop
函数的正确方法是什么,以便在两种情况下都能正常工作。我可以使用C ++中的某种模板或更简单的解决方案吗?
答案 0 :(得分:1)
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 );
}