代码之家  ›  专栏  ›  技术社区  ›  Nick

如何在CLR/托管C++中实现变量类型?

  •  2
  • Nick  · 技术社区  · 16 年前

    在.net中,CLR对象是所有类对象的基础,但不是基本类型(例如int、float等)。如何使用对象等基本类型? 比如 Boost.Variant

    例如。 喜欢 :-

    object intValue( int(27) );
    if (intValue is Int32)
        ...
    
    object varArray[3];
    varArray[0] = float(3.141593);
    varArray[1] = int(-1005);
    varArray[2] = string("String");
    
    4 回复  |  直到 16 年前
        1
  •  4
  •   Marc Gravell    16 年前

    object is GetType() 要检查类型。。。

    object[] varArray = new object[3];
    varArray[0] = 3.141593F;
    varArray[1] = -1005;
    varArray[2] = "String";
    
        2
  •  3
  •   Reed Copsey    16 年前

    由于您提到您使用的是C++/CLI,您应该能够执行以下操作:

    array<Object^>^ varArray =  gcnew array<Object^>(3);
    
    varArray[0] = 3.141593;
    varArray[1] = -1005;
    varARray[2] = "String";
    
    double val = *reinterpret_cast<double^>(varArray[0]);
    
        3
  •  1
  •   John Saunders    16 年前
    object varArray[3] = new object[3];
    varArray[0] = 3.141593;
    varArray[1] = -1005;
    varArray[2] = "String";
    
        4
  •  0
  •   Nick    16 年前

    谢谢你的回答。我需要将我的返回值框起来,例如。

        Object ^ createFromString(String ^ value)
        {
             Int32 i( Convert::ToInt32(value) );
             return static_cast< Object ^ >(i);
        }
    

    我需要通过强制转换到对象指针来框显返回值。直觉!:)

        void writeValue(Object ^ value, BinaryWriter ^ strm)
        {
            Int32 i( *dynamic_cast< Int32 ^ >(value) );
            strm->Write(i);
        }