将对象转换为 C++内置型
我有以下最少的代码:
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;
}
它在 get_prop
函数中给出了 OverflowException
异常。最后我需要在纯 C++ 代码中使用 get_prop
的结果。编写 get_prop 函数的正确方法是什么,以便它在这两种情况下都可以正常工作。我可以使用 C++ 中的某种模板还是有更简单的解决方案?
I have the following minimal code:
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;
}
It gives the OverflowException
exception in get_prop
function. In the end I need to use the result of get_prop
in pure C++ code. What is the correct way to write get_prop
function so it can work without exception in both cases. Can I use some sort of templates as in C++ or there more trivial solution?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Hmya,您正在尝试将 32 位猪塞进 31 位戳中。此代码最终调用 Convert::ToInt32(UInt32 value) ,如下所示:
Kaboom。不确定您想要什么样的溢出行为,但这可以让编译器忽略并避免异常:
Hmya, you are trying to stuff a 32-bit pig in a 31-bit poke. This code ends up calling Convert::ToInt32(UInt32 value) which looks like this:
Kaboom. Not sure what kind of overflow behavior you want, but this lets the compiler do the ignoring and avoids the exception: