代码之家  ›  专栏  ›  技术社区  ›  Kirill V. Lyadvinsky

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

  •  1
  • Kirill V. Lyadvinsky  · 技术社区  · 14 年前

    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++代码中。正确的写作方法是什么 获得道具 函数,以便在这两种情况下都可以正常工作。我可以用C++中的一些模板吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Hans Passant    14 年前

    嗯,你想用31刀捅一头32刀的猪。这段代码最后调用Convert::ToInt32(UInt32值),如下所示:

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

    卡布姆。不确定您想要什么样的溢出行为,但这允许编译器进行忽略并避免异常:

    long get_prop( Object^ v )
    {
        return (long)Convert::ToInt64( v );
    }