C ++匿名结构指针赋值

时间:2012-07-01 13:20:38

标签: c++ pointers casting anonymous-types compiler-theory

所以没有,这不是最好的做事方式。但是,为了理论,如何成功地将指针值分配给匿名结构的指针?

#pragma pack(push,1)
    struct
    {
        __int16 sHd1;
        __int16 sHd2;
    } *oTwoShort;
#pragma pack(pop)

    oTwoShort = (unsigned char*)msg; // C-Error

产生

  

错误C2440:'=':无法从'unsigned char *'转换为   “<未命名型oTwoShort> *'

该示例假定msg本身就是一个有效的指针。

这可能吗?既然你没有实际类型,你甚至可以进行类型转换吗?

4 个答案:

答案 0 :(得分:11)

您可以使用decltype获取类型:

oTwoShort = reinterpret_cast<decltype(oTwoShort)>(msg);

这是在C ++ 11中添加的,因此它不适用于较旧的编译器。 Boost的实现大致相同(BOOST_PROTO_DECLTYPE),旨在与较旧的编译器一起使用。它有一些限制(例如,如果内存服务,每个范围只能使用一次),但无论如何它可能总比没有好。

答案 1 :(得分:7)

我认为你必须使用C ++ 11的decltype

oTwoShort = reinterpret_cast<decltype(oTwoShort)>(msg);

答案 2 :(得分:5)

reinterpret_cast<unsigned char*&>(oTwoShort) = reinterpret_cast<unsigned char*>(msg);

但是,真的吗?

答案 3 :(得分:0)

如上所述,您无法进行指针投射,但您可以这样做:

memcpy(&oTwoShort,&msg,sizeof(void*));