将对象转换为 C++内置型

发布于 2024-10-01 13:25:49 字数 501 浏览 1 评论 0原文

我有以下最少的代码:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

坏尐絯℡ 2024-10-08 13:25:49

Hmya,您正在尝试将 32 位猪塞进 31 位戳中。此代码最终调用 Convert::ToInt32(UInt32 value) ,如下所示:

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 );
}

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:

public static int ToInt32(uint value)
{
    if (value > 0x7fffffff)
    {
        throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
    }
    return (int) value;
}

Kaboom. Not sure what kind of overflow behavior you want, but this lets the compiler do the ignoring and avoids the exception:

long get_prop( Object^ v )
{
    return (long)Convert::ToInt64( v );
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文